@ModelAttributeSpring MVC 的目的和用途是什么?
我是Spring MVC的新手.请帮我解开文档.
文档
Spring MVC文档声明(强调我的):
@ModelAttribute在method参数上指示应从模型中检索参数.如果模型中不存在,则应首先实例化参数,然后将其添加到模型中.一旦出现在模型中,参数的字段应该从具有匹配名称的所有请求参数中填充.WebDataBinder类将请求参数名称(包括查询字符串参数和表单字段)与名称模型属性字段进行匹配.
@RequestParam 将请求参数绑定到控制器中的方法参数.
免责声明/澄清器
我知道@ModelAttribute并且@RequestParam不是相同的东西,不是相互排斥的,不执行相同的角色,并且可以同时使用,因为在这个问题中 - 实际上,@RequestParam可以用于填充字段@ModelAttribute.我的问题更多地是针对其内部运作之间的差异.
题:
@ModelAttribute(用于方法参数,而不是方法)和@RequestParam?之间的区别是什么?特别:
@RequestParam和@ModelAttribute具有信息/人口,在URL即请求参数相同的源,其可以被提供作为被窗体/模型的元素POST编?@RequestParam被丢弃是否正确(除非传递给模型),而检索@ModelAttribute到的变量会自动输入要返回的模型中?或者在非常基本的编码示例中,这两个示例之间真正的工作区别是什么?
例1 @RequestParam::
// foo and bar are thrown away, and are just used (e.g.) to control flow?
@RequestMapping(method = RequestMethod.POST)
public String testFooBar(@RequestParam("foo") String foo,
@RequestParam("bar") String bar, ModelMap model) { …Run Code Online (Sandbox Code Playgroud) 我想将一个对象发送到控制器,该控制器有几个带文件的列表和几个带纯文本的字段.
public class ContributionNew<T extends MovieInfoDTO> {
private List<T> elementsToAdd;
private Map<Long, T> elementsToUpdate;
private Set<Long> idsToDelete;
private Set<String> sources;
private String comment;
}
public class Photo extends MovieInfoDTO {
private MultipartFile photo;
}
@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
@ApiParam(value = "The movie ID", required = true)
@PathVariable("id") final Long id,
@ApiParam(value = "The contribution", required = true)
@RequestBody @Valid final ContributionNew<Photo> contribution
) {
Run Code Online (Sandbox Code Playgroud)
我正在使用邮递员发送数据.然而,他把我扔了
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarywY7ByvgonAjDoaCT;charset=UTF-8' not supported
Run Code Online (Sandbox Code Playgroud)
我应该为这个控制器设置Content-type,以便我可以发送一个包含纯文本字段和带文件列表的对象?
如果我在标题中设置标题
Content-type: multipart/form-data; …Run Code Online (Sandbox Code Playgroud)