-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
질문이 있습니다.
19.11.20 17:37 작성 조회수 237
0
Resouce에 custom Jsonserialize를 만들어 사용하면 꼭 content:{} object안에 내용이 담기는데, 모델마다 serializer를 만들어 주지 않으면 일관성이 떨어져서 content 안에 있는 필드를 꺼내고 싶습니다.
검색을 아무리해도 잘 나오지 않아 질문드립니다.
답변을 작성해보세요.
0
0
백기선
지식공유자2019.11.22
아.. 제가 보기에는 ProductSerializer 말고 ProductResourceSerializer를 만들어 쓰시거나, ProjectResource extends ResourceSupport에다가 모든 필드를 복사해서 넣어 만드시면 해결할 수 있지 않을까요?
0
JiHoon Lee
질문자2019.11.21
바쁘실텐데 번거롭게 해드려 죄송합니다. ㅎㅎ;
👆 jsonSerializer입니다. 이부분은 기선님의 강의에서 나온내용을 특별히 수정하지 않았습니다.
👆 제가 작성한 Product model입니다. 기선님의 강의와 다른점은 모델 자체에 serializer를 적용하였습니다.
이부분이 문제일까요?
👆 hateos를 적용하기 위한 Resource 구현체입니다. 특별히 다른 점은 없습니다. (주석처리한 내용은 좋은 대안을 못찾는다면 저렇게라도 해야할 것 같습니다. 단점은.. getId()메서드가 ResourceSupport에 이미 있어서 'id'로 출력할 수가 없다 + 모델에 필드가 추가되면 Resource파일도 수정해야한다 정도가 될것 같습니다.)
👆 테스트한 결과입니다. 'content'라는 이름이 붙는 것은 Resource interface가 제네릭으로 모델을 명칭을 특정할 수 없어서 범용적으로 사용하기 위함인듯 합니다.
👆 unwrapping 방법중 2번째 방법으로 한다면 'content' 대신 'product'라는 이름으로 key를 만듭니다.
질문이 길어저서 죄송합니다.
0
0
JiHoon Lee
질문자2019.11.21
음.. 기선님 강의 마지막 전 챕터 (문자열 제한하여 출력하기(?))에서 jackson jsonserializer를 구현하였어요.
jsonserializer를 따로 구현하지 않으면 말씀하신것처럼 잘 동작하는데요.
jackson의 serializer를 이용하여 hateaos를 적용하니 이러한 문제가 생기더라구요.
0
0
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
백기선
지식공유자2019.11.21
"스프링 HATEOAS 적용" 수업에 보시면 8분 30초부터 본문을 꺼내서 응답을 만드는 방법에 대해 설명하고 있습니다. 해당 수업 참고 부탁드립니다.
답변 8