강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Gwangseok Lee님의 프로필 이미지
Gwangseok Lee

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 CRUD API 구현

406 Not Acceptable에러 발생

해결된 질문

작성

·

70

0

현재 테스트 코드 작성하고 있는데 다음과 같이 에러 발생합니다.

코드
package board.article.api; import board.article.service.request.ArticleCreateRequest; import board.article.service.response.ArticleResponse; import lombok.AllArgsConstructor; import lombok.Getter; import org.junit.jupiter.api.Test; import org.springframework.web.client.RestClient; public class ArticleApiTest { RestClient restClient = RestClient.create("http://localhost:9000"); @Test void createTest() { ArticleResponse response = create(new ArticleCreateRequest( "hi", "my content", 1L, 1L )); System.out.println("response = " + response); } ArticleResponse create(ArticleCreateRequest request) { return restClient.post() .uri("/v1/articles") .body(request) .retrieve() .body(ArticleResponse.class); } @Getter @AllArgsConstructor static class ArticleCreateRequest { private String title; private String content; private Long writerId; private Long boardId; } @Getter @AllArgsConstructor static class ArticleUpdateRequest { private String title; private String content; } }

 

에러

> Task :common:snowflake:compileJava UP-TO-DATE

> Task :common:snowflake:processResources NO-SOURCE

> Task :common:snowflake:classes UP-TO-DATE

> Task :common:snowflake:jar UP-TO-DATE

> Task :service:article:compileJava

> Task :service:article:processResources UP-TO-DATE

> Task :service:article:classes

> Task :service:article:compileTestJava

> Task :service:article:processTestResources NO-SOURCE

> Task :service:article:testClasses

org.springframework.web.client.HttpClientErrorException$NotAcceptable: 406 Not Acceptable: "{"timestamp":"2025-05-29T06:00:40.838+00:00","status":406,"error":"Not Acceptable","path":"/v1/articles"}"

at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:118)

at org.springframework.web.client.StatusHandler.lambda$defaultHandler$3(StatusHandler.java:86)

at org.springframework.web.client.StatusHandler.handle(StatusHandler.java:146)

at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.applyStatusHandlers(DefaultRestClient.java:672)

at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:195)

at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:659)

at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.body(DefaultRestClient.java:605)

at board.article.api.ArticleApiTest.create(ArticleApiTest.java:26)

at board.article.api.ArticleApiTest.createTest(ArticleApiTest.java:15)

at java.base/java.lang.reflect.Method.invoke(Method.java:580)

at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

> Task :service:article:test

ArticleApiTest > createTest() FAILED

org.springframework.web.client.HttpClientErrorException$NotAcceptable at ArticleApiTest.java:26

1 test completed, 1 failed

> Task :service:article:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':service:article:test'.

> There were failing tests. See the report at: file:///C:/Users/zxc86/Desktop/study/springboot/board/service/article/build/reports/tests/test/index.html

* Try:

> Run with --scan to get full insights.

BUILD FAILED in 4s

6 actionable tasks: 3 executed, 3 up-to-date



gpt에서는 accept 설정이 없어서 그렇다는데 강사님 코드에는 없어서요

원인이 뭘까요?

 

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

Gwangseok Lee님, 안녕하세요!

 

말씀 주신 내용으로는 파악하기가 어렵네요. Accept와는 무관할 것 같습니다.

컨트롤러 코드도 보여주시겠어요?

@RestController로 선언되어 있는지, @PostMapping으로 잘 선언된게 맞는지 확인해보시면 좋을 것 같네요!

0

안녕하세요, 인프런 AI 인턴입니다. Gwangseok Lee님.

406 Not Acceptable 에러는 주로 서버가 클라이언트의 요청을 처리할 수 없는 상황에서 발생합니다. 특히 클라이언트가 서버에 Accept 헤더를 통해 특정한 응답 미디어 타입을 요청할 때, 서버가 그 미디어 타입으로 응답을 제공할 수 없는 경우에 발생합니다. 이를 해결하기 위해 아래 사항을 점검해 보시기 바랍니다:

문제 해결 접근 방법

  1. 컨트롤러의 매핑 확인:

    • 서버가 반환하는 응답의 컨텐츠 타입이 클라이언트의 기대 유형과 일치하는지 확인합니다. 예를 들어, 서버가 @RequestMapping에서 지정한 produces 미디어 타입이 클라이언트가 요청한 Accept 헤더와 일치하는지 검토하세요.
  2. Accept 헤더 설정:

    • RestClient에 명시적으로 Accept 헤더를 설정해 보세요. 서버에서 클라이언트의 요청을 처리할 때 필요한 헤더를 명시적으로 지정해 문제가 발생하는 부분을 명확히 할 수 있습니다.
    return restClient.post()
           .uri("/v1/articles")
           .header("Accept", "application/json") // 헤더 설정
           .body(request)
           .retrieve()
           .body(ArticleResponse.class);
    
  3. 서버 코드 점검:

    • 서버 사이드의 컨트롤러가 적절히 설정되었는지 확인합니다. 특히, 응답의 컨텐츠 유형을 설정하고 해당 유형이 클라이언트가 기대하는 것과 호환되는지 검토하세요. 서버 컨트롤러의 메소드가 @ResponseBody속성을 사용하여 JSON이나 XML로 응답을 변환할 수 있도록 설정되어 있는지 확인합니다.
  4. 디버깅 로그 활성화:

    • 클라이언트와 서버 간의 통신에서 어떤 헤더가 사용되는지 확인할 수 있도록 로그를 활성화합니다. 이는 문제를 해결하는 데 유용한 추가 정보를 제공합니다.

관련 문제에 대한 유사한 인프런 게시물을 통해 보다 깊이 있는 해결책을 참고하실 수 있습니다:

위의 권장사항들을 차례로 점검하면서 문제를 해결해보시기 바랍니다. 만약 여전히 문제가 해결되지 않는 경우, 서버 로그를 함께 검토하여 더 많은 정보를 얻을 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Gwangseok Lee님의 프로필 이미지
Gwangseok Lee

작성한 질문수

질문하기