2011-02-23 12 views
2

私が設定平野spring3 Webプロジェクトを持って、このようなコントローラのメソッドがあります。それが原因でJSONまたはXMLに変換される新しいブックオブジェクトを返しますジャクソンJSONViewsとSpring3 REST Webサービス

@RequestMapping(method = RequestMethod.GET, value = "/book/{id}", headers = "Accept=application/json,application/xml") 
public @ResponseBody 
Book getBook(@PathVariable final String id) 
{ 
    logger.warn("id=" + id); 
    return new Book("12345", new Date(), "Sven Haiges"); 
} 

を春のconfigに変圧器Iセットアップ:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonConverter" /> 
      <ref bean="marshallingConverter" /> 
     </list> 
    </property> 
</bean> 

JSON世代(およびXML)すべての作品が、私はデータのための複数のビューを定義できるようにしたいと思います。たとえば、公開されているJSON/XMLのプロパティが少ない詳細ビューと、完全なプロパティセットの詳細ビューを指定したいとします。ジャクソンのObjectMapperを使用して

が、これは次のように可能である:

 
objectMapper.writeValueUsingView(out, beanInstance, ViewsPublic.class); 

は、私は特定のVIEW(詳細/サマリ)を使用するように春を構成することができます方法はありますか?これを実現する唯一の方法は、私のコントローラメソッドから返された異なるDTOを使うことです。

Thanx!

答えて

1

コントロールのレベルが必要な場合は、自分で行う必要があります。

@ResponseBodyを使用するのではなく、自分でObjectMapperを使用して手動で回答を書き込めます。ところで

private final ObjectMapper objectMapper = new ObjectMapper(); 

@RequestMapping(method = RequestMethod.GET, value = "/book/{id}", headers = "Accept=application/json,application/xml") 
public void getBook(@PathVariable final String id, HttpServletResponse httpResponse) 
{ 
    logger.warn("id=" + id); 
    Book book = new Book("12345", new Date(), "Sven Haiges"); 
    objectMapper.writeValueUsingView(httpResponse.getWriter(), book, ViewsPublic.class); 
} 

writeValueUsingViewは(javadoc参照)JSONの現在のバージョンでは廃止されます。

+1

私は、そのように自動的にxml/jsonビューを切り替えています。これを予感させる方法はありますか? –

関連する問題