Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]

yeonicerely·2022년 11월 28일
0

안녕오류

목록 보기
7/8

SpringBoot를 로그인 화면을 만들 때 발생할 수 있는 여러 예외를 처리하는 코드를 작성했을 때 406 Not Acceptable 에러가 뜨면서 아래와 같은 메시지가 나타났다. 406 에러는 서버에서 허용하지 않은 형태의 정보가 들어왔기 때문에 발생한다.

Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
이는


@AllArgsConstructor
@Getter // Getter를 작성하지 않아서 발생한 문제
public class Response<T> {

    private String resultCode;
    private T result;

    public static Response<Void> error(String resultCode){

        return new Response(resultCode, null);

    }

    public static <T> Response<T> success(T result) {

        return new Response("SUCCESS", result);
    }
}

이는 Reponse라는 https의 응답코드를 받을 수 있는 제네릭 클래스를 작성할 때 @Getter를 작성하지 않았기 때문에 발생했다. @Getter 넣어주지 않으면 RestController에서 Response.success()를 통해서 값을 return 해줄 때 private으로 선언한 result에 담긴 값이 넘어가지 않게 된다. 따라서 서버에서 허용하는 형태의 값을 응답하지 못해서 위와 같은 에러 메시지가 뜨게 되었다.

@RestController
@RequestMapping("/api/v1/users")
@RequiredArgsConstructor
@Slf4j
public class UserController {

    private final UserService userService;

    @PostMapping("/join")
    public Response<UserJoinResponse> join(@RequestBody UserJoinRequest userJoinRequest){
        log.info(userJoinRequest.getUserName(), userJoinRequest.getEmail());
        UserDto userDto = userService.join(userJoinRequest);
        return Response.success(new UserJoinResponse(userDto.getUserName(), userDto.getEmailAddress()));

    }
}

참고자료
1. Getter를 통해 문제 해결하기: https://velog.io/@kai6666/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8A%A4-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A4%91-406-org.springframework.web.HttpMediaTypeNotAcceptableException-Could-not-find-acceptable-representation-%EC%97%90%EB%9F%AC

0개의 댓글