Java 无法读取HTTP消息。缺少必需的请求正文
我遇到了一个问题,无法在服务器端获取我的对象。 我得到这个错误:Java 无法读取HTTP消息。缺少必需的请求正文,java,android,spring,http,Java,Android,Spring,Http,我遇到了一个问题,无法在服务器端获取我的对象。 我得到这个错误: 128870 [http-apr-8080-exec-1] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Require
128870 [http-apr-8080-exec-1] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.webserverconfig.user.entity.User com.webserverconfig.user.controller.UserController.login(com.webserverconfig.user.entity.User)
我正在尝试使用GET请求在服务器端发送对象。我想使用这个对象只是为了验证它上面的字段。(我正在使用简单的用户登录方法,我想检查userName
和userPassword
)
以下是我在服务器端的代码:
请求:
实体用户:
@Entity
@Table(name = "Users")
public class User {
public User() {
}
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
@Column(name = "Id", unique = true, nullable = false)
private long id;
@Column(name = "userName", nullable = false)
private String userName;
@Column(name = "userPassword", nullable = false)
private String userPassword;
@Transient
private String confirmPassword;
public long getId() {
return id;
}
public String getUserName() {
return userName;
}
public String getUserPassword() {
return userPassword;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setId(long id) {
this.id = id;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
}
客户端代码:
private class LoginUserTask extends AsyncTask<Void, Void, User> {
@Override
protected User doInBackground(Void... voids) {
restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
User user = new User(userName, userPassword);
return restTemplate.getForObject(URL.getUserLogin(), User.class, user);
}
@Override
protected void onPostExecute(User user) {
responseEntity = restTemplate.getForEntity(URL.getUserLogin(), String.class);
HttpStatus responseStatus = responseEntity.getStatusCode();
if(responseStatus.equals(HttpStatus.ACCEPTED)){
view.makeToast("User login completed " + user.getUserName());
} else {
view.makeToast("User login or password is not correct");
}
}
}
私有类LoginUserTask扩展异步任务{
@凌驾
受保护的用户doInBackground(无效…无效){
restTemplate=新的restTemplate();
restemplate.getMessageConverters().add(新映射Jackson2HttpMessageConverter());
用户=新用户(用户名、用户密码);
返回restemplate.getForObject(URL.getUserLogin(),User.class,User);
}
@凌驾
受保护的void onPostExecute(用户){
responseEntity=restTemplate.getForEntity(URL.getUserLogin(),String.class);
HttpStatus responseStatus=responseEntity.getStatusCode();
if(responseStatus.equals(HttpStatus.ACCEPTED)){
view.makeToast(“用户登录完成”+User.getUserName());
}否则{
view.makeToast(“用户登录或密码不正确”);
}
}
}
我错过什么了吗?有人能帮忙吗?您已经设置了一个@RequestBody注释,其中有一个用户对象作为输入参数。
在这种情况下,您必须在请求正文中使用POST方法和用户对象。您已经使用用户对象作为输入参数设置了@RequestBody注释。
在这种情况下,您必须将POST方法与请求正文中的用户对象一起使用。
onPostExecute
,但您正在检查get
请求吗?因此,在您的登录
函数中找不到正文,您可能有@RequestBody
注释?@Nathan我使用了错误的请求方法吗?我是说-GET@Nathan哦,我想我明白了。我应该在getForEntity方法中发送对象吗?它没有帮助我(我仍然得到这个错误)我的意思是在你的“请求映射”中,您应该使用POST而不是GETonPostExecute
,但是您正在检查GET
请求?因此在您的登录
函数中找不到正文,您可能有@RequestBody
注释?@Nathan我使用了错误的请求方法吗?我的意思是-GET@Nathan哦,我想我明白了。我应该把这个东西寄出去吗etForEntity方法?它对我没有帮助(我仍然得到这个错误。我的意思是,在你的“请求映射”中,你应该使用POST而不是GET。你不需要将POST与@RequestBody
一起使用。你不需要将POST与@RequestBody
一起使用
private class LoginUserTask extends AsyncTask<Void, Void, User> {
@Override
protected User doInBackground(Void... voids) {
restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
User user = new User(userName, userPassword);
return restTemplate.getForObject(URL.getUserLogin(), User.class, user);
}
@Override
protected void onPostExecute(User user) {
responseEntity = restTemplate.getForEntity(URL.getUserLogin(), String.class);
HttpStatus responseStatus = responseEntity.getStatusCode();
if(responseStatus.equals(HttpStatus.ACCEPTED)){
view.makeToast("User login completed " + user.getUserName());
} else {
view.makeToast("User login or password is not correct");
}
}
}