将FormHttpMessageConverter返回的MultiValueMap转换为Domain Object

时间:2016-12-08 23:36:31

标签: java spring spring-restcontroller

我正在向我的Spring rest应用程序发布一个x-www-formurlencoded字符串,它会自动将其转换为默认的MultiValueMap<String, Object>对象并将其作为参数传递给它:

@RequestMapping(method = RequestMethod.POST, 
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, 
        produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public User save(@Valid @RequestBody final MultiValueMap<String, Object>  
userMultiValueMap) {

...

}

如何自定义我的默认处理程序,以便自动映射特定的域对象(例如说User对象),并可以作为参数传入。这看起来就像使用以下简单application/json帖子获得的自动绑定:

@RequestMapping(method = RequestMethod.POST, 
    consumes = MediaType.APPLICATION_JSON_VALUE, 
    produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public User save(@Valid @RequestBody final User user) {

...

}

User对象是从application/json请求正文帖子映射和创建的。如何配置HttpMessageConverter处理以实现与x-www-formurlencoded类似的操作并获取域对象,而不是MultiValueMap中默认处理提供的FormHttpMessageConverter。 / p>

1 个答案:

答案 0 :(得分:-1)

你只需要将MappingJackson2HttpMessageConverter添加到转换器中,Spring应该可以自动执行你想要的操作。

你还需要在classpath上拥有jackson库,而你的User必须是一个java bean。

如果你想要表格数据而不是json你只需要FormHttpMessageConverter。同时从方法注释中删除consumes = ... json部分。