• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

질문이 있습니다.

19.11.20 17:37 작성 조회수 237

0

Resouce에 custom Jsonserialize를 만들어 사용하면 꼭 content:{} object안에 내용이 담기는데, 모델마다 serializer를 만들어 주지 않으면 일관성이 떨어져서 content 안에 있는 필드를 꺼내고 싶습니다.

검색을 아무리해도 잘 나오지 않아 질문드립니다.

답변 8

·

답변을 작성해보세요.

0

JiHoon Lee님의 프로필

JiHoon Lee

질문자

2019.11.22

조언 감사합니다 ㅎㅎ

저는 필드를 복사하는 방법으로 해결하였습니다.

ps. 유튜브도 잘 보고있습니다 ㅎㅎ

0

아.. 제가 보기에는 ProductSerializer 말고 ProductResourceSerializer를 만들어 쓰시거나, ProjectResource extends ResourceSupport에다가 모든 필드를 복사해서 넣어 만드시면 해결할 수 있지 않을까요?

0

JiHoon Lee님의 프로필

JiHoon Lee

질문자

2019.11.21

바쁘실텐데 번거롭게 해드려 죄송합니다. ㅎㅎ;

jsonserializer

👆 jsonSerializer입니다. 이부분은 기선님의 강의에서 나온내용을 특별히 수정하지 않았습니다.

product model

👆 제가 작성한 Product model입니다. 기선님의 강의와 다른점은 모델 자체에 serializer를 적용하였습니다.

이부분이 문제일까요?

Resource

👆 hateos를 적용하기 위한 Resource 구현체입니다. 특별히 다른 점은 없습니다. (주석처리한 내용은 좋은 대안을 못찾는다면 저렇게라도 해야할 것 같습니다. 단점은.. getId()메서드가 ResourceSupport에 이미 있어서 'id'로 출력할 수가 없다 + 모델에 필드가 추가되면 Resource파일도 수정해야한다 정도가 될것 같습니다.)

👆 테스트한 결과입니다.  'content'라는 이름이 붙는 것은 Resource interface가 제네릭으로 모델을 명칭을 특정할 수 없어서 범용적으로 사용하기 위함인듯 합니다. 

👆 unwrapping 방법중 2번째 방법으로 한다면 'content' 대신 'product'라는 이름으로 key를 만듭니다.

질문이 길어저서 죄송합니다.

0

"출력값 제한하기" 수업도 다시 살펴봤는데, 거기에도 content는 찍히지 않는데 어떻게 쓰신 건지.. 코드를 공유해 주실 수 있으신가요?

0

JiHoon Lee님의 프로필

JiHoon Lee

질문자

2019.11.21

음.. 기선님 강의 마지막 전 챕터 (문자열 제한하여 출력하기(?))에서 jackson jsonserializer를 구현하였어요.

jsonserializer를 따로 구현하지 않으면 말씀하신것처럼 잘 동작하는데요.

jackson의 serializer를 이용하여 hateaos를 적용하니 이러한 문제가 생기더라구요.

0

흠.. 그러니까 두번째 세번째가 왜 그렇게 결과가 나올까요. 제가 보여드린 예제에서는 풀려서 나왔는데요.

0

JiHoon Lee님의 프로필

JiHoon Lee

질문자

2019.11.21

네 해당내용을 확인하였습니다. 기선님께서 3가지 방법을 제안하셨는데, 1번째 방법을 제외하고 2,3번째 방법으로는 도저히 해결되지 않습니다.

2번째 방법으로 했을 경우는 'model이름' : { }

3번째 방법으로 했을 경우 content : { }

@Jsonunwrapped 어노테이션 불통 (이유는 아래 답변)

저와 유사한 고민을 한 사람이 있어 링크를 올립니다.

https://github.com/spring-projects/spring-hateoas/issues/414

정말 나이스한 방법은 없는 건지 아니면 어쩔수 없이 1번의 방법으로 개발을 해야하는건지 대안이 없을까요?

0

"스프링 HATEOAS 적용" 수업에 보시면 8분 30초부터 본문을 꺼내서 응답을 만드는 방법에 대해 설명하고 있습니다. 해당 수업 참고 부탁드립니다.