コントロール json シリアル化/逆シリアル化
1. @JsonIgnoreProperties
@JsonIgnoreProperties(value = { "prop1","prop2" })
の使用法は、Pojo クラスを変更し、シリアル化および逆シリアル化中に指定されたプロパティを無視するために使用されます。1 つ以上の属性を使用できます。
@JsonIgnoreProperties(ignoreUnknown = true)
は、Pojo クラスを変更し、コンストラクターで設定できず、対応するセッター メソッドがない属性など、逆シリアル化中に設定できない属性を無視するために使用されます。
2 . @JsonProperty アノテーション
json フィールドの名前が Pojo のプロパティ名と一致しない場合、@JsonProperty を使用して getter() または setter() メソッドにアノテーションを付けることができます。このアノテーションは、対応する json を設定しますまた、@JsonProperty はコンストラクターの仮パラメータにアノテーションを付けるためによく使用されますが、このとき、コンストラクターには @JsonCreator.
3 のアノテーションを付ける必要があります。クラス定義には Parameter コンストラクターがありますが、パラメーターのないコンストラクターが提供されていない場合は、逆シリアル化中にエラーが報告されます。方法は 2 つあります:
- 方法 1: パラメーターのないコンストラクターを追加する
- 方法 2: @JsonCreator アノテーションをこのパラメーター化されたコンストラクターに追加します。パラメーターには @JsonProperty のアノテーションを付ける必要があります。
- 4. @JsonSetter および @ JsonGetter アノテーション
json フィールドの名前が Pojo のプロパティ名と一致しない場合は、@JsonGetter を使用して getter() メソッドに注釈を付け、@JsonSetter を使用して setter() メソッドに注釈を付けることができます。注釈はプロパティ名を指定できます。どちらの注釈も @JsonProperty.
5 に置き換えることができます。 @JsonAnySetter 注釈
一般に、オブジェクトのプロパティ名は Car オブジェクトなどのように決定されます。ブランド/価格などの名前付き属性ですが、場合によっては、Car オブジェクトのいくつかの拡張属性も設定する必要があります。これらの拡張属性の名前はまだ決定されていません。通常、Map は、これらの K/ を格納するために使用されますV. json データ内のこれらの属性をクラスのマップに逆シリアル化するには、K/V セッター メソッドをクラスに追加する必要があり、このセッター メソッドには @JsonAnySetter.
public class Car { public String brand; private Map<String, String> properties; @JsonAnySetter public void add(String key, String value) { properties.put(key, value); } }# の注釈が付けられている必要があります。 ## @JsonAnySetter を使用してクラスを追加すると、次の json データをマップに逆シリアル化できます:
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }6. @JsonAnyGetter アノテーション は @JsonAnySetter アノテーションに対応します。クラスを変換したい Map K/V 属性を json にシリアル化するには、@JsonAnyGetter メソッドをクラスに追加する必要があります。このメソッドは KV マップを直接返すことができます。
public class Car {
public String brand;
private Map<String, String> properties;
@JsonAnyGetter
public Map<String, String> getProperties() {
return properties;
}
}
シリアル化された json は次のとおりです: { "brand":"Benz", "attr2":"val2", "attr1":"val1" }7. @JsonFormat アノテーション通常は、日付/時刻プロパティのシリアル化に使用される時刻形式をクリアします。
public class Event {
public String name;
@JsonFormat(
shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
public Date eventDate;
}
8.@JsonSerialize および @JsonDeserialize アノテーション@JsonSerialize アノテーション クラス属性に特別なシリアル化関数を設定できます。 @JsonDeserialize アノテーションは、json 属性の逆シリアル化関数をカスタマイズするために使用されます。SpringBoot シリアル化ルール
#Include.Include.ALWAYS
- Default
-
Include.NON_DEFAULT 属性はデフォルト値であり、シリアル化されません -
- 属性が NULL の場合、シリアル化されません
1. グローバル設定
/** * 〈返回json空值去掉null和""〉 〈功能详细描述〉 * * @author gogym * @version 2017年10月13日 * @see JacksonConfig * @since */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 // Include.Include.ALWAYS 默认 // Include.NON_DEFAULT 属性为默认值不序列化 // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化 //objectMapper.setSerializationInclusion(Include.NON_EMPTY); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); return objectMapper; } }
spring.jackson.default-property-inclusion=non_null spring: jackson: default-property-inclusion: non_null
2. ローカル設定設定が必要なエンティティ クラスまたはフィールドの設定
アノテーションの追加 @JsonInclude(Include.NON_NULL)3. ローカル シリアル化のカスタマイズ (1)、シリアル化ツール クラスのカスタマイズStdSerializer
public class ClientObjectSerialize extends JsonSerializer<CreditBorrowerRepaymentRequestDto>{ @Override public void serialize(CreditBorrowerRepaymentRequestDto dto, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeStartObject(); try { Field[] fields = dto.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); if(null == field.get(dto)){ continue; } jsonGenerator.writeFieldName(field.getName()); jsonGenerator.writeObject(field.get(dto)); } } catch (Exception e) { e.printStackTrace(); } jsonGenerator.writeEndObject(); } }(2) アノテーションを使用してエンティティ クラスに作用する
@JsonSerialize(using = ClientObjectSerialize.class)
public class CreditBorrowerRepaymentRequestDto{
}
(3) エンティティ オブジェクト フィールドに作用したり、NULL 値を処理したり、変換 @JsonSerialize(using = ClientStringSerialize.class) private String name; @JsonSerialize(using = ClientDtaeSerialize.class) private Date date; public class ClientStringSerialize extends JsonSerializer<String> { @Override public void serialize(String string, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if(string == null){ jsonGenerator.writeString(string + "[NULL]"); }else{ jsonGenerator.writeString(string); } } } public class ClientDtaeSerialize extends JsonSerializer<Date> { @Override public void serialize(Date createDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createDate)); } }4. カスタマイズ グローバル null 変換シリアル化SpringBoot は Json データで null 値処理を返し、文字列型の null 値を "" に変換し、コレクション配列型の null 値を [] に変換し、元のデータ型の null 値を 0 に変換し、Boolean 型の null 値を false に変換し、エンティティ オブジェクトの null 値を {} に変換します。 (1)
カスタム null 値シリアル化プロセッサ
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /** * 自定义null值序列化处理器 */ public class CustomizeNullJsonSerializer { /** * 处理数组集合类型的null值 */ public static class NullArrayJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(); jsonGenerator.writeEndArray(); } } /** * 处理字符串类型的null值 */ public static class NullStringJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(""); } } /** * 处理数值类型的null值 */ public static class NullNumberJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(0); } } /** * 处理boolean类型的null值 */ public static class NullBooleanJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeBoolean(false); } } /** * 处理实体对象类型的null值 */ public static class NullObjectJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartObject(); jsonGenerator.writeEndObject(); } } }(2)
シリアライザー修飾子
import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import java.util.Collection; import java.util.List; /** * <pre class="brush:php;toolbar:false"> * 此modifier主要做的事情为: * 1.当序列化类型为数组集合时,当值为null时,序列化成[] * 2.String类型值序列化为"" * **/ public class MyBeanSerializerModifier extends BeanSerializerModifier { @Override public List
ジャクソン エンティティの構成
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; /** * 配置Jackson实体 */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); /** 为objectMapper注册一个带有SerializerModifier的Factory */ objectMapper.setSerializerFactory(objectMapper.getSerializerFactory() .withSerializerModifier(new MyBeanSerializerModifier())); SerializerProvider serializerProvider = objectMapper.getSerializerProvider(); serializerProvider.setNullValueSerializer(new CustomizeNullJsonSerializer .NullObjectJsonSerializer()); return objectMapper; } }
以上がSpringBoot での Json のシリアル化と逆シリアル化の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。

Javaには、さまざまなプラットフォームでの特定の構成とチューニングが必要です。 1)-XMSや-XMXなどのJVMパラメーターを調整して、ヒープサイズを設定します。 2)ParallelGCやG1GCなどの適切なごみ収集戦略を選択します。 3)さまざまなプラットフォームに適応するようにネイティブライブラリを構成します。これらの測定により、Javaアプリケーションはさまざまな環境で最適に機能することができます。

Osgi、apachecommonslang、jna、andjvmoptionsareeffectiveforformplatform-specificchallengesinjava.1)osgimanagesdependenciesandisolatescomponents.2)apachecommonslangprovidesutilityfunctions.3)jnaallowsnativecode.4)

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









