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

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

작성한 질문수

스프링 기반 REST API 개발

질문이 있습니다.

작성

·

340

0

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

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

답변 8

0

JiHoon Lee님의 프로필 이미지
JiHoon Lee
질문자

조언 감사합니다 ㅎㅎ

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

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

0

백기선님의 프로필 이미지
백기선
지식공유자

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

0

JiHoon Lee님의 프로필 이미지
JiHoon Lee
질문자

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

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
질문자

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

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

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

0

백기선님의 프로필 이미지
백기선
지식공유자

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

0

JiHoon Lee님의 프로필 이미지
JiHoon Lee
질문자

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

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

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

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

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

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

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

0

백기선님의 프로필 이미지
백기선
지식공유자

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

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

작성한 질문수

질문하기