Spring MVC将json或编码参数映射到@RequestParam

时间:2015-09-24 19:16:00

标签: java json spring spring-mvc

我有一个使用此方法的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(第一个请求体)可以正常工作。什么是最好的方法来使这两个工作?

1 个答案:

答案 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字段