我无法确定我在这里做错了什么。我正在使用应用程序“Postman”向服务发送请求。该参数是一个非常简单的POJO,如下所示。当我尝试发送请求时,我得到一个响应:“服务器拒绝了此请求,因为请求实体所采用的方法所请求的资源不支持该格式”
用于请求的类:
public class LoginAttempt {
private String userName;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
控制器中的API:
@RequestMapping(value="/validate", method=RequestMethod.POST, produces="application/json")
public boolean validateUser(@RequestBody LoginAttempt login) {
System.out.println("Login attempt for user " + login.getUserName() + login.getPassword());
return true;
}
答案 0 :(得分:2)
FormHttpMessageConverter ,当内容类型为application / x-www-form-urlencoded时,用于@RequestBody注释参数不能绑定目标类,因为 @ModelAttribute 可以)。 因此,您需要@ModelAttribute而不是@RequestBody
使用@ModelAttribute注释而不是像这样的@RequestBody
public boolean validateUser(@ModelAttribute LoginAttempt login)
或者您可以创建一个单独的方法表单,使用适当的标题属性处理表单数据,如下所示:
@RequestMapping(value="/validate", method=RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded" produces="application/json")
答案 1 :(得分:1)
尝试添加此bean:
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="prefixJson" value="false"/>
<property name="supportedMediaTypes" value="application/json"/>
</bean>