1。はじめに
この記事では、主にSpringMVCバックエンドサービスを使用して、構成を通じて複数の返品値タイプ(XML、JSON、HTML、Excel)をサポートする方法を紹介します。
ここのコードはスプリングブートを使用します。アドレスをダウンロード:https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2。基本概念
2.1コンテンツタイプとhttpheaderの設定を受け入れる違い
受け入れ:インターフェイスによってクライアントに返されるデータ形式
Curl - Header 'Accept:Application/JSON' http:// localhost:8080/todo
コンテンツタイプ:クライアントからサーバーに送信されたデータ形式
curl -x put - header 'content -type:application/json' -d '{"title": "weenkd schedule"、 "content": "sleep"}' http:// localhost:8080/todo2.2 SpringMVCで出力を生成する2つの方法
1)サーバーがRESTFULメソッドを使用して、クライアントのAJAXまたは他のサーバーリクエストのデータのみを提供する場合、 @ResponseBodyは通常、リターンを識別するために使用されます。この時点で、SpringはhttpmessageConverterを使用して、返されたオブジェクトを必要な形式にフォーマットします。
2)プレゼンテーションレイヤー(HTMLなど)を提供する必要がある場合、SpringMVCはViewResolverを使用してリターンを処理します。
時々、あなたのアプリケーションは両方を提供する必要があります
2.3 SpringMVC出力形式の決定
多くの場合、複数のシステムまたは複数の端子をサポートするには、同じデータを異なる症状に出力する必要があります。
SpringMVCは、ContentNegotationsTrategyを使用して、ユーザーが取得するデータの形式を決定します。
ContentNegotationsTrategyは、ユーザーが返すデータの種類を識別するために3つの方法を使用します
以下の構成をご覧ください
@OverridePublic void configurecontentNegotiation(contentNegotiationConfigurer Configure){configurer.favorpathextension(false).favorametername( "mediatype").defaultcontenttype(mediatype.applicient_json)。 mediatype.application_xml).mediatype( "html"、mediatype.text_html).mediatype( "json"、mediatype.application_json);}上記の構成をプロジェクトのwebmvcconfigに追加します。これは、URLサフィックスのルールを閉じ、リクエストパラメータールールを開き、リクエストパラメーターを「mediatype」に設定することを意味します。デフォルトの返品形式はJSONであり、XMLとHTMLの返却もサポートします。
これらの3つのコンポーネントは、異なる形式で出力を返すための鍵です
2.4 requestmappings
2.4.1 RequestMappingHandLermapping
春に通常使用するのは、リクエストマッピングHandLermappです。 RequestMappingInfoによると、一致する条件を改良します。全体的な検索プロセスは次のとおりです。
abstracthandlermethodMapping実装インターフェイスgethandlerinternal
1. urlpathhelperを使用して、リクエストに対応するパスを見つけます
2。パスに対応するハンドラーメトッドを見つけます
2.1 urlmap requestmappinginfoから一致する条件を見つけます
2.2一致する条件が同等の値で見つかった場合は、一致条件に追加します
2.3一致する条件が見つからない場合は、すべてのhandlermethodsのrequestmappinginfoを使用して一致します
2.4試合を並べ替え、最優先の一致を取り出し、それが唯一の最優先事項かを確認します
2.5:条件が一致し、条件が一致しない2つの状況をカプセル化します。
3.ハンドライツのカプセル化して、BeanのインスタンスがContentNegotiationManagerに保存されていることを確認します。これにより、MinityPEの一致条件の比較が提供され、フレームワークが最も適切な処理方法と一致します。
2.5 httpmessageconverter
2.5.1デフォルトのメッセージコンバーター
SpringMVCは、デフォルトで次のhttpmessageconverterをロードします。
bytearrayhttpmessageconverter変換バイトアレイズストリングhttpmessageconverter converts converts converts org.springframework.core.io.io.resource javax.xml.transform.sourceformhttpmessageconverterは、フォームデータをMultivalueMap <string、string> .jaxb222rootelementhttpmessageconverterに変換します。 (Jackson 2がClassPathに存在する場合にのみ追加)MappingJacksonhttpmessageConverterはJSONを変換します(JacksonがClassPathに存在する場合にのみ追加)AtomFeedHTTPMessageConverterはAtom Feedsを変換します(ローマがクラスパスに存在する場合にのみ追加されます)rsschannelhtpmessageconverter contpmessageconverter converts rs classpath)
返すと、 @ResponseBodyによって識別されます。フレームワークはhttpmessageConverterを使用して戻り値を処理します。デフォルトのXMLCoverterは特に有用ではなく、エンティティオブジェクトの@xmlrootelementアノテーションに依存します。あまり便利ではありません。したがって、補助クラスライブラリを導入し、MessageConverterをカスタマイズして、返されたオブジェクトをXML形式に直接処理できるようにします。
Gradle Import Library
コンパイルグループ: 'org.springframework'、name: 'spring-oxm'、version: '4.3.9.Release'compileグループ:' com.thoughtworks.xstream '、name:' XStream '、バージョン:' 1.4.10 ''
構成
@OverridePublic void configuremessageconverters(list <httpmessageconverter <? super.configuremessageconverters(converters);} private httpmessageconverter <object> createxmlhttpmessageconverter(){marshallinghttpmessageconverter xmlconverter = new marshallinghttpmessageconverter(); XStreamMarshaller xstreammarshaller = new Xstreammarshaller(); xmlConverter.setMarshaller(XStreamMarshaller); xmlConverter.setunmarshaller(XStreamMarshaller); xmlConverterを返します;}2.6解像度を表示します
2.6.1ページレンダリング(Freemarker)
ページに戻る必要がある場合は、適切なViewResolverで絵を描く必要があります。ここでは、FreeMarkerをページエンジンとして使用します。
Gradle Import Library
コンパイル( "org.springframework.boot:spring-boot-starter-freemarker")
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。