关于json:Spring REST jackson没有在POST请求上编组

Spring REST jackson not marshalling on POST request

我使用Spring4并添加了Jackson DataBind,这样我就可以将请求/响应对象进行整理。当我从GET请求返回对象时,它会工作,但不会填充post-request对象。它不是空的,因此正在实例化它

我尝试使用httpEntity来获取方法参数,以查看我是否正在获取JSON对象,它是否在实体的主体中。然后我可以手动整理它。

我想弄清楚杰克逊失踪或配置不当的原因

这是实例化但不填充对象的方法。im使用弹簧4,控制器注释为@RestController,它结合了@Controller@ResponseBody

1
2
3
4
5
6
@RequestMapping(value="/create", method = RequestMethod.POST, consumes =  MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getUser(User user) {
    log.debug("got user:" + user.getId());

    return new ResponseEntity<>(HttpStatus.OK);
}

这是JSON:

1
2
3
4
5
{
"id": 12,
"lastName":"Test",
"firstName":"Me"
}

这是用户对象:公共类用户{私人内部ID;私有字符串姓氏;私有字符串名字;公共用户()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public User(int id, String lname, String fname) {
    this.id = id;
    this.lastName = lname;
    this.firstName = fname;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
}

我的上下文文件中还定义了杰克逊映射器。尽管医生说这不必做。没有它就行了

1
2
3
4
5
6
7
8
9
10
<beans:bean
 class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <beans:property name="messageConverters">
        <beans:list>
            <beans:ref bean="jsonMessageConverter"/>
        </beans:list>
    </beans:property>
</beans:bean>
 <beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean>


您的方法中缺少一个注释调用@requestbody,如果我没有错,您还需要添加@responsebody。

1
2
3
4
5
6
@RequestMapping(value="/create", method = RequestMethod.POST, consumes =  MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<?> getUser(@RequestBody User user) {
    log.debug("got user:" + user.getId());

    return new ResponseEntity<>(HttpStatus.OK);
}


尝试在方法调用中使用@RequestBody批注

1
2
@RequestMapping(value="/create", method = RequestMethod.POST, consumes =  MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity <?> getUser(@RequestBody final User user){


提供的答复是正确的。我确实需要将@RequestBody添加到方法中..我误读了文档..只有@ResponseBody@Controller使用@RestController添加。因此,我不需要将@ResponseBody添加到返回对象中。