2017-04-26 1 views
0

서버 측에서 개체를 가져올 수 없다는 문제가 있습니다. 내가 GET 요청을 사용하여 서버 측에서 개체를 보내려고하고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: Required request body is missing: public com.webserverconfig.user.entity.User com.webserverconfig.user.controller.UserController.login(com.webserverconfig.user.entity.User) 

: 이 오류를 얻고있다. 이 객체를 사용하여 필드를 확인하려고합니다. (간단한 사용자 로그인 방법을 사용하고 있는데 userNameuserPassword을 확인하고 싶습니다.) 여기

서버 측에 내 코드는 다음과 같습니다 요청 :

@RequestMapping(value = "/login", method = RequestMethod.GET) 
    @ResponseStatus(value = HttpStatus.ACCEPTED) 
    public User login(@RequestBody User user) { 
     userValidator.validateUserLogin(user); 
     securityService.autoLogin(user.getUserName(), user.getUserPassword()); 
     return user; 
    } 

법인 사용자 :

@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"); 
      } 
     } 
    } 

내가 실종 무엇인가? 아무도 이걸로 도와 줄 수 없어?

+0

'onPostExecute'이지만'get' 요청을 확인하고 있습니까? 그래서'@ RequestBody' 어노테이션이있는'login' 함수에서 시체를 찾을 수 없습니까? – Nathan

+0

@Nathan 잘못된 요청 방법을 사용하고 있습니까? 나는 의미한다 - GET – Andrew

+0

@ 네이슨 오, 나는 그것을 얻는다 고 생각한다. getForEntity 메서드에서 객체를 보내야합니까? – Andrew

답변

3

사용자 개체를 입력 매개 변수로 사용하여 @RequestBody 주석을 설정했습니다. 이 경우 POST 메서드를 요청 본문의 User 개체와 함께 사용해야합니다.

+0

감사합니다. – Andrew

관련 문제