아래 코드에서 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로 바꿔서 값을 넣어주니
정상적으로 값이 잘 들어갔다~
룰루