CS Activity/Projects

[Spring Boot] @RequestParam() String name에서 name에 자꾸 빈 값이 들어가는 경우 에러 해결

Jenn28 2024. 3. 12. 02:42

아래 코드에서 createRoom(@RequestParam(defaultValue = "") String name) 로직에 문제가 없는데도 Postman에서 테스트했을 때 name 값이 아예 안들어가는 문제가 발생했다.

@RequiredArgsConstructor
@Controller
@RequestMapping("/chat")
public class ChatRoomController {

    // 채팅방 생성
    @PostMapping("/room")
    @ResponseBody
    public ChatRoom createRoom(@RequestParam(defaultValue = "") String name) {
        return chatRoomRepository.createChatRoom(name);
    }
    
}

 

ChatRoomRepository 로직도 분명 문제가 없었다..

@Repository
public class ChatRoomRepository {

    private Map<String, ChatRoom> chatRoomMap;

    @PostConstruct
    private void init() {
        chatRoomMap = new LinkedHashMap<>();
    }

    // 주어진 name으로 새 채팅방 생성
    public ChatRoom createChatRoom(String name) {
        ChatRoom chatRoom = ChatRoom.create(name);
        chatRoomMap.put(chatRoom.getRoomId(), chatRoom);
        return chatRoom;
    }
    
}

 

 

그렇다면 어디서 문제가 발생했을까.

 

바로, Postman 테스트 방식이었다.

 

지금까지 Raw - JSON 으로 들어가서 application/json 타입으로 인자를 전달했는데,

@RequestParam은 기본적으로 Content-Type의 데이터를 처리하기 위해 설계되었다고 한다..

 

그러므로, Content-Type을 application/x-www-form-urlencoded로 바꿔서 값을 넣어주니

정상적으로 값이 잘 들어갔다~

 

룰루