ホームページ  >  記事  >  Java  >  Spring Boot で XML リクエストとレスポンスのサポートを拡張する方法の紹介

Spring Boot で XML リクエストとレスポンスのサポートを拡張する方法の紹介

不言
不言オリジナル
2018-09-27 16:02:242501ブラウズ

この記事では、Spring Boot で XML リクエストとレスポンスのサポートを拡張する方法を紹介します。必要な方は参考にしていただければ幸いです。

これまでのすべての Spring Boot チュートリアルでは、HTML および JSON 形式のリクエストとレスポンスの処理についてのみ説明し、使用しました。では、XML 形式のリクエストをコントローラー内のオブジェクトにすばやくパッケージ化し、XML 形式でオブジェクトを返すにはどうすればよいでしょうか?

実装原則: メッセージ コンバータ

上記の問題について詳しく説明する前に、Spring Boot での HTTP リクエストの実装には Spring MVC が使用されていることをまず知っておく必要があります。 Spring MVC にはメッセージコンバータの概念があり、主にさまざまな形式のリクエストデータを処理し、それをオブジェクトに変換して、より良いプログラミングエクスペリエンスを提供します。

HttpMessageConverter インターフェースは Spring MVC で定義されており、メッセージコンバーターの型の判断、読み書きの判断、操作を抽象化します。具体的には、次の定義がわかります。ご存知のとおり、HTTP リクエストの Content-Type にはさまざまな形式の定義があります。Xml 形式でのメッセージ変換をサポートしたい場合は、対応するコンバータを使用する必要があります。 Spring MVC には、デフォルトで、Jackson によって実装されたコンバーターのセットである MappingJackson2XmlHttpMessageConverter がすでにあります。

拡張実装

ステップ 1: Xml メッセージ コンバータの導入

従来の Spring アプリケーションでは、次の構成を通じて XML 形式データのメッセージ変換実装を追加できます。 #

public interface HttpMessageConverter<T> {

    boolean canRead(Class<?> clazz, [@Nullable](https://my.oschina.net/u/2896689) MediaType mediaType);

    boolean canWrite(Class<?> clazz, [@Nullable](https://my.oschina.net/u/2896689) MediaType mediaType);

    List<MediaType> getSupportedMediaTypes();

    T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;

    void write(T t, [@Nullable](https://my.oschina.net/u/2896689) MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;

}
Spring Boot アプリケーションでは、上記のような面倒な作業は必要ありません。jackson-dataformat-xml 依存関係を追加するだけで、Spring Boot が MappingJackson2XmlHttpMessageConverter の実装を自動的に導入します。 ##同時に、Xml データを構成するために、オブジェクトの属性間の関係を維持するために使用されるアノテーションも上記の依存関係に含まれるため、この依存関係も必要です。

ステップ 2: オブジェクトと Xml の間の関係を定義する

基本的な拡張が完了したら、次のような XML コンテンツに対応する Java オブジェクトを定義できます。 # その中には: @Data、@NoArgsConstructor、@AllArgsConstructor はコードを簡略化するための lombok のアノテーションであり、主に get、set、およびコンストラクター関数を生成するために使用されます。 @JacksonXmlRootElement および @JacksonXmlProperty アノテーションは、XML 内のオブジェクト属性間の対応を維持するために使用されます。

上で構成したユーザー オブジェクト、マッピングできる XML サンプルは次のとおりです (上記の XML を使用して、後でインターフェイスを要求できます):

@Configuration
public class MessageConverterConfig1 extends WebMvcConfigurerAdapter {
    [@Override](https://my.oschina.net/u/1162528)
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
        builder.indentOutput(true);
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
    }
}
ステップ 3: インターフェイスを作成するXML リクエストの受信

変換するオブジェクトが完了したら、次のような XML を受信して​​ XML を返すインターフェイスを作成できます。

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>
最後に、Spring Boot アプリケーションを起動して、このインターフェイスを試してください。 POSTMAN などのリクエスト ツールを使用すると、Xml がリクエストされ、処理された XML コンテンツが返されることがわかります。 (

ケースコード

)

以上がSpring Boot で XML リクエストとレスポンスのサポートを拡張する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。