TIL/TIS 211106

gyujun9403·2021년 11월 6일
0

TIL/TIS

목록 보기
1/14

406 Not Acceptable Error

서버가 요청의 헤더에 정의된 응답을 생성할 수 없을때 발생하는 에러(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

profile
백엔드와 서버 in 42Seoul

0개의 댓글