inflearn logo
강의

Course

Instructor

Spring-based REST API development

REST API 개발 중 비즈니스 로직 적용 부분의 JSON 에러

Resolved

241

shihi

1 asked

0

아래와 같이 perform 과정에서 validator -> serialize로 넘어가는 부분에서 json 이 eventDTO를 찾을 수 없다는 에러가 발생하여 json을 직렬화할 수 없어서 error 메시지가 반환되지 않아 test 실패가 나타나는 것 같습니다. 혹시 버전 차이로 인해 필요한 어노테이션이나 함수가 달라져 발생하는 문제일까요? 관련하여 검색해도 답안을 찾기 어려워서 질문 드립니다. 감사합니다.

Inconvertible types; cannot cast 'org.example.springrestproject.Events.EventControllerTests' to 'org.springframework.test.util.JsonPathExpectationsHelper'


No value at JSON path "$[0].objectName"

java.lang.AssertionError: No value at JSON path "$[0].objectName"

at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:302)

at org.springframework.test.util.JsonPathExpectationsHelper.assertExistsAndReturn(JsonPathExpectationsHelper.java:326)

at org.springframework.test.util.JsonPathExpectationsHelper.exists(JsonPathExpectationsHelper.java:190)

at org.springframework.test.web.servlet.result.JsonPathResultMatchers.lambda$exists$3(JsonPathResultMatchers.java:123)

at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:214)

at org.example.springrestproject.Events.EventControllerTests.createEvent_Bad_Request_Wrong_Input(EventControllerTests.java:149)

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

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

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

Caused by: java.lang.IllegalArgumentException: json can not be null or empty

at com.jayway.jsonpath.internal.Utils.notEmpty(Utils.java:401)

at com.jayway.jsonpath.JsonPath.read(JsonPath.java:390)

at com.jayway.jsonpath.JsonPath.read(JsonPath.java:377)

at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:299)

... 8 more

java spring rest-api json test

Answer 1

0

communityai8509

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

강의 중 발생한 JSON 관련 오류로 인해 테스트가 실패하는 부분에 대한 질문을 주셔서 감사합니다.

해당 에러는 JsonPath를 통해 특정 경로의 값을 참조하려다 발생하는 것으로 보입니다. 정확한 원인을 파악하기 위해선 아래 두 가지 항목을 점검해 보시는 것이 좋습니다.

  1. MediaTypeAccept 설정:
    기본적으로 Spring 프로젝트에서 MediaType.APPLICATION_JSON 대신 MediaType.APPLICATION_JSON_UTF8를 사용할 때 문제가 발생할 수 있습니다. 이를 해결하려면 컨트롤러와 테스트 코드에서 미디어 타입을 맞춰주는 것이 중요합니다.

  2. JsonPath, Enum 및 직렬화 문제:
    JsonPath를 사용해 JSON 데이터를 검증할 때 Enum 타입의 값을 문자열로 비교해야 할 때가 있습니다. 이때, enum 값을 바로 비교하면 타입 불일치 오류가 발생할 수 있습니다.

관련된 문제로 도움이 될 만한 유사한 질문과 답변들을 링크해드리니, 확인해보시길 추천드립니다.

관련 질문 및 답변

  • 테스트시 enum 값 불일치

    • 주요 내용: JsonPath를 통해 Enum 값을 비교할 때 문자열로 변환하여 비교하는 방법과 Enum 타입의 JSON 직렬화를 다루는 방법에 대한 설명이 포함되어 있습니다.
  • ErrorResource 추가후 발생되는 에러

    • 주요 내용: 스프링 부트 버전 업그레이드와 JSON 직렬화/역직렬화 과정에서 발생할 수 있는 이슈 다루기, ErrorsResource 설정법 등에 대해 설명하고 있습니다.
  • 인덱스 만들기-ErrorsResource 부분 질문

    • 주요 내용: ErrorsResource 사용 시 JSON 파싱 오류를 해결하는 방법이 담겨있습니다. JsonSerializer에 특정 필드명을 추가하고, 테스트 코드에서 해당 필드명으로 체크하는 방법을 설명하고 있습니다.

추가 설명 및 해결 방법

  • 이유: 제공된 JSON 경로가 잘못되었거나 존재하지 않는 경우 발생할 수 있습니다. 예를 들어, eventDTO 객체에 objectName 필드가 존재하지 않는 상황일 수 있습니다.
  • 해결 방법: producesHAL_JSON_VALUE를 설정해보시고, 테스트 코드에서 모델 객체를 objectMapper로 직렬화하여 쿼리에 포함시키는 것을 확인해보세요.

현재 에러 메시지와 상황을 종합해보면, JsonPath를 적절하게 사용하고 있는지, 그리고 미디어 타입 설정이 맞는지 주의깊게 살펴보는 것이 중요합니다. 각 코드를 세밀하게 검토하고 필요한 타입 변환을 확실히 해준다면, 오류를 해결하는 데 도움이 될 것입니다.

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

Spring 시큐리티 관련해서 WebSecurityConfigurationAdapter

0

71

1

junit5 사용하시는 분들

0

85

1

자바 빈 스펙을 준수하는지 체크하는 테스트

0

233

2

스프링 부트 3버전에서의 실습

0

188

1

java.lang.AssertionError: Status

0

528

2

spring doc 관련 파일 생성 관련 배포 관련 질문 드립니다.

0

284

1

섹션2 201응답받기 부분 테스트 404에러 질문입니다

0

737

1

강의 자료가 404입니다 확인 부탁 드려요!

0

474

1

연동 DB문의

0

356

1

이벤트 Repository강의 중 Event 클래스에 private Integer Id; 위치 질문

0

503

1

(Mac) postgressql 관련하여 port kill 해도 다시 살아나는 경우

0

378

0

maven으로 생성한 docs파일(index.html)에서의 not found 오류 질문

0

620

1

테스트 오류 질문드립니다.

0

510

1

docs 요청값이 반영이 안되네요... (해결)

-1

390

1

psql 적용 후 에러

0

816

2

mvn package 시 다음과 같은 에러가 나시면

0

760

2

Event에 Account manager를 추가했으면 문서화 필요

0

272

1

2년 훨씬 전 부터 Restlet-> Talend API 로 바뀌었습니다~

1

472

1

asciidoc 추가 스니펫 에러 해결법

0

397

1

_links 는 현재 fieldWithPath 를 해주지 않아도 됩니다.

0

420

3

깃랩 처음 사용자를 위한 index.adoc raw 보는 법

0

328

1

eclipse 쓰시는 분을 위한 maven-resources-plugin 팁

0

329

1

부트 + jupiter 인 경우 설정법

0

340

1

혹여 기선님 말 안 듣고 gradle로 프로젝트 생성했다가 피똥싸고 계신 분들을 위하여

2

386

1