[spring] HttpMediaTypeNotAcceptableException: Could not find acceptable representation 오류 By starseat 2023-01-26 15:10:21 java/spring Post Tags # 이슈 API 호출 후 다음과 같은 에러를 발견하였다. `HttpMediaTypeNotAcceptableException: Could not find acceptable representation` # 확인 로그를 확인해보니 `Content-Type` 이 `application/json` 로 요청이 들어올 때는 정상적으로 응답을 내려주지만 `application/x-www-form-urlencoded` 으로 요청이 들어올 때 위 에러 문구가 나타났다. 이를 확인하기 위해 `Postman` 으로 직접 요청을 해 보니 다음 로그가 발견되었다. ```log - 2023-01-26 14:36:41,683 INFO [domain:***][LogAspect][][http-nio-8080-exec-1] [REQUEST][요청 method]->HEADER[ostype=ANDROID,accept=application/x-www-form-urlencoded,content-type=application/x-www-form-urlencoded,user-agent=PostmanRuntime/7.30.0,postman-token=e9dbbbc2-ba3c-41d5-8d5c-5e6f2c085f58,host=localhost:8080,accept-encoding=gzip, deflate, br,connection=keep-alive,content-length=130], ...] -- // 요청 처리 - 2023-01-26 14:36:43,307 INFO [domain:***][LogAspect][][http-nio-8080-exec-1] [RESPONSE][요청 method]->DTODATA[<200 OK OK,AppObject(app=...),[resultCode:"0000", resultMessage:"%EC%A0%95%EC%83%81+%EC%B2%98%EB%A6%AC%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4."]>]->(1626ms) -- - 2023-01-26 14:36:43,318 ERROR[domain:***][ApiExceptionHandler][][http-nio-8080-exec-1] UnknownError: Could not find acceptable representation -- org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:249) ~[spring-webmvc-5.3.23.jar:5.3.23] at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:219) ~[spring-webmvc-5.3.23.jar:5.3.23] ... ``` # 해결 1 `application/x-www-form-urlencoded` 으로 요청되는 것을 `application/json` 으로 바꾸는 것이 가장 좋겠지만 그럴 수는 없는 입장이라 두 가지 모두 허용을 해 줘야 한다. 당장은 `Controller` 에 같은 기능을 하는 method 를 하나 더 만들었다. ```java // 새로 추가 (application/x-www-form-urlencoded) @GetMapping(value = "/test", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public String test1() { return new Gson().toJson(service.getSampleData()); } // 원본 @GetMapping("/test") public ApiResponse test2() { return ApiResponse.succeed(service.getSampleData()); // ApiResponse 는 Custom 개발 } ``` - `consumes`: 요청 데이터 타입 정의 - `produces`: 반환 데이터 타입 정의 # 해결 2 아직 이거다!! 싶은 방안을 못 찾았다. 방안을 모색 후 업데이트 예정이다. # 출처 - [spring requestmapping-consumes](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping-consumes) - [spring requestmapping-produces](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping-produces) Previous Post [spring] Teams Message Push 및 FeginClient 추가 Next Post [spring] build.gradle 기초 정리