@Request String이 안되는 이유

jungnoeun·2023년 8월 28일
0

spring

목록 보기
24/24

@Request String userMessage로 받았는데 swagger로 테스트를 해보니 자꾸 기대했던 결과와 다르게 나왔다.

내 기대:

보내는 값: 
{
  "userMessage": "message1"
}

받는 값:
true

하지만 자꾸 받아지는 값은 false만 나왔다. 이를 통해 userMessage에 내가 기대했던 대로 message1값만 들어가지 않는다는 것을 알았다.
이와 관련해 @RequestBody에 대해 찾아보니 아래와 같았다.



@RequestBody 정리

  • 스프링 컨트롤러의 핸들러 메서드에서 사용하는 어노테이션으로,
  • 해당 어노테이션이 나타내는 것은 스프링에서는 request body를 객체로 deserialize 해줘야 한다는 것이고,
  • 그 변환된 객체가 핸들러 메서드의 파라미터로 전달된다.
  • 내부적으로 역직렬화는 많은 구현체 중의 하나인 MessageConverter 가 담당한다.
    • MessageConverter는 서버로 들어오는 데이터를 오브젝트로 가공하거나 비즈니스단에서 처리된 오브젝트를 http 메시지로 변환하는 역할을 담당한다.

@RequestBody 어노테이션을 사용하면 request body를 도메인 객체가 아닌 자바 Map 으로도 역직렬화할 수 있다.

즉, 도메인으로 받는 것보다 Map 형식으로 받는 것이 옳다.



수정 전 작성한 Controller 코드

@PostMapping("/result/spam")
    public ResponseEntity compareMessages(@RequestBody Map<String,String> userMessage) {
        Boolean pac = messageService.compareMessages(userMessage.get("userMessage"));
        return ResponseEntity.ok(pac);
    }



수정 후 작성한 Controller 코드

@PostMapping("/result/spam")
    public ResponseEntity compareMessages(@RequestBody String userMessage) {
        Boolean pac = messageService.compareMessages(userMessage.get("userMessage"));
        return ResponseEntity.ok(pac);
    }



참고:
https://velog.io/@wisdom08/RequestBody%EB%A1%9C-String-%ED%83%80%EC%9E%85%EC%9D%84-%EB%B0%9B%EB%8A%94-%EA%B2%BD%EC%9A%B0

profile
개발자

0개의 댓글