Java springmvc@RequestBody的工作原理
我认为Java springmvc@RequestBody的工作原理,java,spring,spring-mvc,Java,Spring,Spring Mvc,我认为@RequestBody尝试将requestparams映射到属性名注释后的对象 但如果我得到: @RequestMapping(value = "/form", method = RequestMethod.GET) public @ResponseBody Person formGet(@RequestBody Person p,ModelMap model) { return p; } 请求: http://localhost:8080/proj/home/form?id=
@RequestBody
尝试将requestparams
映射到属性名注释后的对象
但如果我得到:
@RequestMapping(value = "/form", method = RequestMethod.GET)
public @ResponseBody Person formGet(@RequestBody Person p,ModelMap model) {
return p;
}
请求:
http://localhost:8080/proj/home/form?id=2&name=asd
返回415
当我用@RequestParam-Map-params
更改@RequestBody-Person-p
时,一切正常:
@RequestMapping(value = "/form", method = RequestMethod.GET)
public @ResponseBody Person formGet(@RequestParam Map<String, String> params) {
return new Person();
}
弹簧间隙3.2.3.释放
我哪里出错了?不,这是@modeldattribute
的工作,而不是@RequestBody
@modeldattribute
使用相应请求参数的值填充目标对象的字段,必要时执行转换。它可以用于HTML表单生成的请求、带有参数的链接等
@RequestBody
使用预配置的HttpMessageConverter
s之一将请求转换为对象。它可以用于包含JSON、XML等的请求。但是,没有复制@modeldattribute
行为的HttpMessageConverter
将输入转换为bean需要:
对JSON主体的实例使用POST或PUT请求。
在请求映射中通过“consumes”指定预期的内容tipe也很好:
@RequestMapping(value = "/form", method = RequestMethod.POST, consumes = "application/json" )
将实现HttpMessageConverter的转换器实例添加到servlet上下文(例如servlet.xml)
很抱歉,缺少详细信息,但我希望这会有所帮助您是否尝试向人员
添加默认构造函数?只是尝试了,没有帮助。谢谢
@RequestMapping(value = "/form", method = RequestMethod.POST, consumes = "application/json" )
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
curl -X POST http://localhost:8080/proj/home/form -d '{"name":"asd", "id": 2}' -H 'Content-type:application/json'