JSON을 비롯한 다양한 표현으로 Spring을 통해 RESTful 웹 서비스를 구성하고 있습니다. 나는 인터페이스가 대칭 적이기를 바랍니다. 즉, GET을 통해 JSON에 직렬화 된 객체의 형식이 POST/PUT이 받아 들일 수있는 형식이기도합니다. 불행히도 GET을 작동시킬 수는 있습니다.Spring MVC 3.0으로 대칭형 JSON 제작/사용
는 여기에 JSON 메시지 컨버터와보기로 구성되어 전송 및 JSON을받는 내 구성입니다 : 내가, 예를 들어, 책을 객체를 반환하는 GET와 컨트롤러를 공격
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</util:list>
</property>
</bean>
<bean id="contentNegotiatingViewResolver" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<util:map>
<entry key="json" value="application/json"/>
</util:map>
</property>
<property name="defaultViews">
<util:list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
</util:list>
</property>
</bean>
, 그것은 이런 식으로 출력합니다. 나는 주위를 켜고 POST를 통해 일부 유사한 JSON을 재 제출 또는 PUT 경우
{"book":{"isbn":"1234","author":"Leo Tolstoy","title":"War and Peace"}}
은 봄에 대한 Unrecognized field "book" (Class com.mycompany.Book), not marked as ignorable
불평, 그것을 소비 할 수 없다. 또한, "책"래퍼 요소를 제거하면 (차라리,하지만 무슨 일이 일어나는 지 알기 위해), 나는 나쁜 요청을받습니다. 두 경우 모두 내 컨트롤러 코드가 절대로 안됩니다.
여기 내 컨트롤러가 있습니다. JSON 전용 코드를 여러 개 표현할 수 있기 때문에 여기에 JSON 전용 코드 (마샬링/언 마샬링되는 클래스의 주석)를 사용하지 않을 것입니다. 스프링의 분리 된 MVC 인프라를 사용하고 싶습니다. 일의 (마샬링 /보기가 해결/등.) 구성 파일에 : 당신은 당신이 특정 POST 방법을 구성 할 수 있도록 컨트롤러 방법에 GET 사용하도록 지정하는
@RequestMapping(method=PUT, value="/books/{isbn}")
@ResponseStatus(NO_CONTENT)
public void saveBook(@RequestBody Book book, @PathVariable String isbn) {
book.setIsbn(isbn);
bookService.saveBook(book)
}
@RequestMapping(method=GET, value="/books/{isbn}")
public ModelAndView getBook(@PathVariable String isbn) {
return new ModelAndView("books/show", "book", bookService.getBook(isbn));
}
MappingJackson2JsonView에는 extractValueFromSingleKeyModel 속성이 있습니다. true로 설정하면 SimpleJacksonJsonView와 똑같이 동작합니다. – Felix
이 질문의 시점에서, 나는 재산이 존재하지 않았다고 믿습니다. 감사! – SingleShot