2012-01-24 8 views
2

Springを使用する場合、JSONとXMLの両方を返すときにベストプラクティスと見なされるのは何ですか?JSONまたはXMLを決定するためにどのような戦略を使用しますか?

は、私は方法があるとしましょう: localhost:8080/app-name/items/1.xmllocalhost:8080/app-name/items/1.jsonをし、それぞれの形式のデータを取得:

@RequestMapping(value="items/{id}", method = RequestMethod.GET) 
public Item getItem(@PathVariable, Long id) { 
    // Find and return item. 
} 

どのように私のようなスタイルでこれを呼び出すことができますか?

+4

あなたはむしろ 'Accept' HTTPヘッダーに基づいてコンテンツネゴシエーション方法を使用する必要があります。それはこれを行うことを意味します。 –

+1

私はピーターに同意します。何かもっとRESTfulなことは、エクステンション経由でレスポンスフォーマットを強制するよりも良い方法と考えられます。 – aweigold

+0

ありがとう、皆さん。しかし、1つの質問は、「URI」の拡張子は、それが正確に*あなたが得ている*ことを示すという点でより表現的**になりますか?ちょっと興味があるんだけど。 :) – whirlwin

答えて

3

これは、春のドキュメントhereで説明されています。あなたは、ヘッダーを受け入れる使用することができます

  • を返すためにタイプを決定するために2つの別々のURLを使用することができます

    1. 。ただし、ブラウザからは、受け入れヘッダーを設定することはできません。したがって、別のURLを使用すると、より多くの制御が可能になります。

  • 4

    ほとんどの明白な解決策:

    @RequestMapping(value="items/{id}.{format}", method = RequestMethod.GET) 
    public Item getItem(@PathVariable, Long id, String format) { 
        if(format.equals("xml")) 
    ... 
    } 
    
    3

    使用@ResponseBody、あなたはJSONとXMLのMIMEタイプを使用してオブジェクトの項目を扱うことができ、あなたのHandlerAdapterに登録HttpMessageConvertersを持っていることを確認してください。これにより、同じItemを返すコントローラーを複製しないようにすることができ、保守とテストをより簡単に行うことができます。

    は、追加情報のためにこれを参照してください。 http://www.ibm.com/developerworks/web/library/wa-restful/

    関連する問題