Spring Boot Json화 관련 겪은 이슈를 정리하고자 합니다.
비슷한 이슈(문제)를 겪으시는 분들 도움 되시길 바랍니다!
Cannot construct instance of 'com.cheor.wanted_10.recruitment.dto.RecruitmentDTO' (no Creators, like default constructor, exist)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecruitmentDTO {
@NotBlank(message = "서비스에 등록된 회사명을 입력해주세요.")
private String companyName;
@NotBlank(message = "채용포지션을 입력해주세요")
private String position;
@NotNull(message = "채용보상금을 입력해주세요. 없으면 0")
private Integer reward;
@NotBlank(message = "채용내용을 입력헤주세요.")
private String content;
@NotBlank(message = "사용기술을 입력해주세요")
private String skill;
}
Spring에서 HTTP 요청 본문을 Java 객체로 변환하려면 @RequestBody 어노테이션이 필요합니다.
클라이언트가 보낸 JSON 형식의 HTTP 요청 본문을 Java 객체로 변환해주는 역할을 합니다. 이를 위해 내부적으로 HttpMessageConverter를 사용하는데, JSON 데이터의 경우 MappingJackson2HttpMessageConverter (혹은 GsonHttpMessageConverter)가 사용됩니다.
따라서, 클라이언트로부터 받은 JSON 데이터를 Java 객체에 바인딩하기 위해서는 @RequestBody 어노테이션을 메서드 매개변수 앞에 붙여야 합니다. 이렇게 하면 Spring은 HTTP 요청 본문의 JSON 데이터를 해당 타입의 새로운 객체로 변환한 후 메서드 인자로 전달합니다.
@PostMapping("/register")
public RsData<Recruitment> register(@Valid @RequestBody RecruitmentDTO recruitmentDTO) {
RsData<Recruitment> rsData = recruitmentService.create(recruitmentDTO);
return rsData;
}@RequestBody 어노테이션을 통한 HTTP 요청 객체 추출 시 DTO객체 사용하지 않아 테스트케이스 실패 @PostMapping("/recommend")
public RsData<PlanDTO> recommend(@RequestBody Integer totalPrice) {
}
{
"totalPrice" : "1000000"
}
@Data
public static class TotalPriceDTO {
private Integer totalPrice;
}
@PostMapping("/recommend")
public RsData<PlanDTO> recommend(@RequestBody Integer totalPrice) {
}