Restful json리턴할때 Request 데이터는 다시 리턴하고 싶지 않은데 어떻게 해야하나요?
- 작성자 :
- 정*창
- 작성일 :
- 2015-02-10 00:37:54
- 조회수 :
- 1,201
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
우선 searchVO에 id를넘겨 조회하는 api입니다.
저는 결과만 json으로 보내고 싶은데 호출할때 보낸 데이터도 같이 다시 json return해주네요.
값 하나하나 ""으로 set하는거 말고 아예 안보내는 방법은 없나요?
{ "id": 20, "content": "공지사항 테스트 입니다.", "category": "1", "title": "공지사항 테스트", "searchVO": { "id": 20, "category": null, "title": null, "content": null } }
====>
{ "id": 20, "content": "공지사항 테스트 입니다.", "category": "1", "title": "공지사항 테스트"}
Controller
============================
@RequestMapping(value = "/notice", method = RequestMethod.GET)
public String selectNotice(@ModelAttribute("searchVO") NoticeVO searchVO, ModelMap model) throws Exception {
NoticeVO noticeVO = noticeService.selectNotice(searchVO);
if(noticeVO != null){
model.put("id", noticeVO.getId());
model.put("category", noticeVO.getCategory());
model.put("title", noticeVO.getTitle());
model.put("content", noticeVO.getContent());
}
return "";
}
dispatcher-servlet.xml
=====================================
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="0">
<property name="contentNegotiationManager">
<bean class="org.springframework.web.accept.ContentNegotiationManager">
<constructor-arg>
<bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
<constructor-arg>
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="prefixJson" value="false"/>
</bean>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="autodetectAnnotations" value="true"/>
</bean>
</property>
</bean>
</list>
</property>
</bean>
저는 결과만 json으로 보내고 싶은데 호출할때 보낸 데이터도 같이 다시 json return해주네요.
값 하나하나 ""으로 set하는거 말고 아예 안보내는 방법은 없나요?
{ "id": 20, "content": "공지사항 테스트 입니다.", "category": "1", "title": "공지사항 테스트", "searchVO": { "id": 20, "category": null, "title": null, "content": null } }
====>
{ "id": 20, "content": "공지사항 테스트 입니다.", "category": "1", "title": "공지사항 테스트"}
Controller
============================
@RequestMapping(value = "/notice", method = RequestMethod.GET)
public String selectNotice(@ModelAttribute("searchVO") NoticeVO searchVO, ModelMap model) throws Exception {
NoticeVO noticeVO = noticeService.selectNotice(searchVO);
if(noticeVO != null){
model.put("id", noticeVO.getId());
model.put("category", noticeVO.getCategory());
model.put("title", noticeVO.getTitle());
model.put("content", noticeVO.getContent());
}
return "";
}
dispatcher-servlet.xml
=====================================
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="0">
<property name="contentNegotiationManager">
<bean class="org.springframework.web.accept.ContentNegotiationManager">
<constructor-arg>
<bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
<constructor-arg>
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="prefixJson" value="false"/>
</bean>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="autodetectAnnotations" value="true"/>
</bean>
</property>
</bean>
</list>
</property>
</bean>
A
안녕하세요. 정영창님.
특정 모델값에 대한 필터링 기능은 제공되지만, 값이 null이거나 ""인 경우에 생략하는 처리는 제공되지 않습니다. (다만, MappingJacksonJsonView의 renderMergedOutputModel 메소드를 확장하시면 처리는 가능합니다.)
또는 model에 넣으시면서(put), 값에 대한 존재 유무를 확인하셔서 처리하실 수 있을 것 같습니다.
추가적으로 searchVO에 대하여 전체가 불필요하신 경우에는 메소드 파라미터에 지정된 @ModelAttribute("searchVO")를 제외시키시면 모델에 등록되지 않기 때문에 해당 값들은 제외됩니다.
(일반적으로 검색 등의 조건을 유지하기 위해 다시 model에 지정하지만, restful 방식의 경우 조건 유지가 필요 없기 때문에 모델에 넣으실 필요가 없음)
그럼, 즐거운 하루되십시오.
감사합니다.
특정 모델값에 대한 필터링 기능은 제공되지만, 값이 null이거나 ""인 경우에 생략하는 처리는 제공되지 않습니다. (다만, MappingJacksonJsonView의 renderMergedOutputModel 메소드를 확장하시면 처리는 가능합니다.)
또는 model에 넣으시면서(put), 값에 대한 존재 유무를 확인하셔서 처리하실 수 있을 것 같습니다.
추가적으로 searchVO에 대하여 전체가 불필요하신 경우에는 메소드 파라미터에 지정된 @ModelAttribute("searchVO")를 제외시키시면 모델에 등록되지 않기 때문에 해당 값들은 제외됩니다.
(일반적으로 검색 등의 조건을 유지하기 위해 다시 model에 지정하지만, restful 방식의 경우 조건 유지가 필요 없기 때문에 모델에 넣으실 필요가 없음)
그럼, 즐거운 하루되십시오.
감사합니다.