カスタム構成および方法でSpringBoot JSON解決スキーム(A) - ジャクソンを使用して

まず、理解HttpMessageConverter

HttpMessageConverter(メッセージ変換ツール):
 それなしですべての生のJSON成都、SpringMVC自動的に設定JacksonしてGsonあるHttpMessageConverterので、ユーザーJacksonGsonあなたならば追加の構成は、あなただけの依存関係があることができ追加する必要があります。
 使用したSpring MVCのHttpMessageConverterインタフェース変換HTTPリクエストとレスポンスを。賢明なデフォルト設定は、中に含まれています开箱即用あなたが設定する場合、私は、意味JacksonGson、あなたが設定する必要はありません場合は、システム提供を使用し、お使いのシステムのデフォルトを使用します!これは、春の主流の考え方である:SpringBoot契約は設定よりも大きく、

1.APIが結果を返すとJavaは、フロントエンドに返されたオブジェクトにJSON形式のデータを解析する方法を、JSON文字としてシリアル返さエンドサービスオブジェクトしようとしている
データはJavaに解析されるか、着信JSONの2.フロントエンドは、APIにオブジェクトをパラメータとして、意志すぐにフロントエンドJSON文字列は、Javaオブジェクトにデシリアライズ来ました

第二には、ソースコードを表示します

 依存関係の簡単な春のプロジェクトを作成し、ウェブ依存性をインポートし、信頼に依存JSONが含まれて見つけることができ、追加のアドオンそう。
ここに画像を挿入説明

  • JSON:
    ロケーション:org/springframework/boot/autoconfigure/http/JacksonHttpMessageConvertersConfiguration.java
    (Gsonは完全に一致しているが、Gsonの使用は、それぞれのGsonに依存追加する必要があるため。)
@Configuration(proxyBeanMethods = false)
class JacksonHttpMessageConvertersConfiguration {

	@Configuration(proxyBeanMethods = false)
	@ConditionalOnClass(ObjectMapper.class)
	@ConditionalOnBean(ObjectMapper.class)
	@ConditionalOnProperty(name = HttpMessageConvertersAutoConfiguration.PREFERRED_MAPPER_PROPERTY,
			havingValue = "jackson", matchIfMissing = true)
	static class MappingJackson2HttpMessageConverterConfiguration {

		@Bean
		@ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class,
				ignoredType = {
						"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter",
						"org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter" })
		MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
			return new MappingJackson2HttpMessageConverter(objectMapper);
		}

	}

@ConditionalOnClass(ObjectMapper.class):あなたが依存JSONインポートする場合、システムは上記の構成、使用がデフォルトになりますMappingJackson2HttpMessageConverter有効にするには、変換ツール。
@ConditionalOnMissingBean:なし豆の設定がない場合、システムは、追加等の時刻形式、必要な自己設定の必要性を持っている場合、システムは、ユーザが設定した優先ビーンビーンなるとシステム構成を無視し、ここで豆にデフォルト設定されます

第三に、カスタム設定

シンプルを書き込むためのコントローラクラス、簡単なテスト

@RestController
@RequestMapping("/test")
public class StudentController {
    @GetMapping("/hello")
    public Student get(){
        Student student = new Student();
        student.setId((long) 1);
        student.setAge(15);
        student.setName("alvin");
        student.setBirthday(new Date());
        return student;
    }
}

インターフェースポストマンコール
ここに画像を挿入説明
と共にエンティティクラス対応マップフィールド@JsonFormat(pattern = "yyyy-MM-dd")注釈フォーマットは変更します

public class Student {
    private Long id;
    private String name;
    private Integer age;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday
}

ここに画像を挿入説明
 このように簡単な操作ですが、非常に実用的ではない、プロジェクトはエンティティクラスの複数を含んでおり、このように、日付プロパティを追加するエンティティを複数含む各クラスは非常に退屈でエラーが発生しやすくなります!場合
したがって、全体的な構成が使用することで、使用に便利であるJacksonHttpMessageConvertersConfiguration.javaアクションを、ユーザが独立にフォーマット変換JSONを設定することができ

構成:

オプション1:

 [新規作成JsonConfig.javaAの設定クラスを(前にテストすることを忘れないでください@JsonFormat(pattern = "yyyy-MM-dd")注釈がコメントアウト)

@Configuration
public class JsonConfig {
    @Bean
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        //更改日期全局配置
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
        converter.setObjectMapper(objectMapper);
        return converter;
    }
}

 豆は置き換えられますJacksonHttpMessageConvertersConfiguration.javaよう、Beanを@ConditionalOnMissingBean満たされた、システムのデフォルトの設定が自動的に失効します。

  • 郵便配達の呼び出しは、日付形式は、生成
    ここに画像を挿入説明
    もこの方法で使用することができる他の構成の多くは、次のobjecMapper:
    ここに画像を挿入説明

オプション2:

 スキームを見つけることができますを通じて、フォーマット操作を主にしている修正しobjecMapper、操作しMappingJackson2HttpMessageConverter、我々は一人で提供できるようにオブジェクトが実際に、当社の営業フォーマットに何もしない提供するために、単にObjectMapper
 @ConditionalOnClass(表示されJacksonHttpMessageConvertersConfiguration.javaにObjectMapper.class)、Objectmapperはすなわち、異なる注入構成から来ているJacksonAutoConfiguration.java
位置:org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java
 もちろん、私たちはここに後にプログラム確かに、ここでそれらを検証、デバッグすること!
ここに画像を挿入説明
 したがって、我々は個別にできるJsonConfig.javaObjectMapperをすることができます設定します!

    @Bean
    ObjectMapper objectMapper(){
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
        return objectMapper;
    }

デバッグと@Beanユーザーの自己構成を行くためのプログラムを発見し、システムが自動的に@Bean自動設定が無視
ここに画像を挿入説明
力にまだあります。
ここに画像を挿入説明

公開された71元の記事 ウォンの賞賛102 ・は 70000 +を見て

おすすめ

転載: blog.csdn.net/qq_44717317/article/details/104441519