서버가 요청의 헤더에 정의된 응답을 생성할 수 없을때 발생하는 에러(Not Acceptable).
2021-11-06 23:54:43.295 WARN 5830 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
{
"timestamp": "2021-11-06T14:54:43.310+00:00",
"status": 406,
"error": "Not Acceptable",
"path": "/todo"
}
해결 : 일반적으로 jackson 라이브러리의 의존성이 없을때 발생한다. 그러나 spring-boot-starter-web에 포함되므로 해당사항 없음.
아래의 코드에서 반환할 ResponseDTO\<TodoDTO>를 ResponseEntity에 담아서 보낸다. 이때 ResponseDTO에 @setter가 없었기 때문에 보낸 json을 만들수 없었고, 406error가 발생한걸로 보인다. -> @Data추가.
@RestController
@RequestMapping("todo")
public class TodoController {
@Autowired
TodoService service;
@PostMapping
public ResponseEntity<?> createEntity(@RequestBody TodoDTO dto) {
try {
// 파라매터로 받은 dto를 이용해 entity형태로 변환, 초기화
TodoEntity entity = TodoDTO.getTodoEntity(dto);
entity.setUserId("TestUserId");
entity.setDone(false);
entity.setId(null);
// entity생성
List<TodoEntity> listEntity = service.create(entity);
List<TodoDTO> listDTO = listEntity.stream().map(TodoDTO::new).collect(Collectors.toList());
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().data(listDTO).build();
return ResponseEntity.ok().body(response);
} catch (RuntimeException e) {
String error = e.getMessage();
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().error(error).build();
return ResponseEntity.badRequest().body(response);
}
}
}
참고한곳 : zzang9ha.tistory