我有一个使用此方法的Spring控制器:
@RequestMapping(value="/testUrl", method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public @ResponseBody String method(@RequestParam String propertyId, @RequestParam String comments) {...}
我希望这能够处理
的请求主体"propertyId=123&comments=something"
和json等价物:
{"propertyId":"123","comments":"comment"}
目前只有form-url-encoded(第一个请求体)可以正常工作。什么是最好的方法来使这两个工作?
答案 0 :(得分:2)
您可以使用@RequestParam
来处理网址参数,就像您正在做的第一个一样。使用@RequestBody
处理请求的正文,然后将要解析的值设置为包装类,如
public @ResponseBody String handleMyDTO(@RequestParam String propertyId, @RequestParam String comment, @RequestBody MyDTO dto){//impl goes here}
MyDTO在哪里
public class MyDTO {
//use @JsonPropery("my_custom_prop_name") if you want to use a //different name to map the field into json
private String propertyId;
private String comment;
//getters setters default constructor
}
注意 @RequestBody
有资格一起使用@Valid
注释进行验证
如果您要将表单内容发送到控制器,则可能需要使用@ModelAttribute MyDTO dto
代替@RequestParam
字段