강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

정중한 개구리님의 프로필 이미지
정중한 개구리

작성한 질문수

postman 으로 post요청의 @modelattribute 만들수없나요?

작성

·

192

0

@PostMapping("login/save")
public String joinMembership(@Validated @ModelAttribute Member member, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "loginSave2";
    }

    loginService.save(member);

    return "redirect:/";
}

 

제가짠 코드인데요

원래 회원가입이 제대로 작동하는지 html 폼에서 온 값을 @ModelAttribute로 생성을 해야하는데 postman으로 생성을 해서 테스트 하려했습니다.

 

post요청을두고, 주소입력하고 body에 x-www-form-unlencoded 로 키,값을 입력하니 아예 객체생성도안되고, raw로 하고 json으로 키,값 입력하니 모든값이 null인 member객체가 생성되네요..

 

질문드립니다.

 

  1. post요청의 @modelattribute로 객체를 생성할때, html폼에서 온값으로 객체생성이 아닌 postman으로 객체생성은 안되는건가요?

 

  1. bidingresult에 에러가있어서 loginSave2페이지로 돌려보내는데, 어떤 오류가있는건지 확인은 어떻게하나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

  1. @ModelAttribute는 주로 HTML Form에서 전송된 데이터를 객체에 바인딩하기 위해 사용되지만, Postman 같은 툴을 사용해서도 객체 생성은 가능합니다. 다만, @ModelAttribute는 Form 데이터를 기반으로 객체를 매핑하기 때문에 Postman에서 테스트할 때는 content-typeapplication/x-www-form-urlencoded로 설정하고 Body에 데이터를 key-value 형태로 입력해야 합니다. JSON 형식으로 데이터를 보내면 @ModelAttribute가 올바르게 매핑하지 못하기 때문에 모든 값이 null인 객체가 생성됐을 것입니다. JSON을 사용하고 싶다면 @RequestBody를 사용해야 합니다.

  2. BindingResult 객체는 검증 후의 에러를 담기 위해 사용됩니다. 이 객체에 에러가 있는지 확인하는 방법 중 하나는 bindingResult.hasErrors() 메소드를 호출하는 것입니다. 실제 어떤 에러가 발생했는지 상세하게 확인하고 싶다면, bindingResult.getAllErrors() 메소드를 사용하여 에러 리스트를 가져올 수 있습니다. 각 에러에 대해 getDefaultMessage() 메소드를 호출하면 해당 에러의 상세 메시지를 확인할 수 있습니다. 예를 들어, 이를 로깅하거나 콘솔에 출력해볼 수 있습니다.

if (bindingResult.hasErrors()) {
    bindingResult.getAllErrors().forEach(error -> {
        System.out.println(error.getDefaultMessage());
    });
    return "loginSave2";
}

이렇게 에러 메시지를 확인하면 어떤 검증에서 문제가 발생했는지 파악할 수 있습니다.

값이 null로 입력안되게 하려면 어떻게해야되나요? @ModelAttribute는 사용이 불가능한건가요?

 

Headers부분에 키값은 content-type , value 값을 application/x-www-form-urlencoded로 입력은 했습니다

정중한 개구리님의 프로필 이미지
정중한 개구리

작성한 질문수

질문하기