Jackson JSONシーケンス化逆シーケンス化
6592 ワード
ジャックソンって何?https://github.com/FasterXML/jackson
Jacksonは主に以下のパッケージから構成されています
Kotlinプラグイン--jackson-module-kotlinhttps://github.com/FasterXML/jackson-module-kotlin
このモジュールは、Kotlinクラスとデータクラスのシーケンス化/逆シーケンス化のサポートを追加します.Jacksonの追加モジュールは、Kotlin言語、特にメソッド/コンストラクション関数パラメータ名の自省をサポートするために使用され、明示的な属性名コメントを追加する必要はありません.このモジュールは、Kotlinクラスとデータクラスのシーケンス化/逆シーケンス化のサポートを追加します.以前は、Jacksonがオブジェクトに逆シーケンス化できるように、Kotlinオブジェクトにデフォルトのコンストラクション関数が存在する必要がありました.このモジュールを使用すると、単一のコンストラクション関数クラスを自動的に使用できます.また、補助コンストラクション関数または静的ファクトリを持つクラスもサポートされます.
クイックスタート->ObjectMapper
SerializationFeature DeserializationFeature
(逆)シーケンス化列挙は、Javaオブジェクトの(逆)シーケンス化方式に影響する簡単なオン/オフ機能を定義します.
SpringのObjectMapperを構成するにはどうすればいいですか?MappingJackson 2 HttpMessageConverterはgetterメソッドを提供しています
注釈
Jacksonは、Jacksonのデフォルト方式に従ってjavaオブジェクトをシーケンス化および逆シーケンス化し、実際の必要に応じてデフォルト方式を柔軟に調整するには、Jacksonの注釈を使用します.よく使われる注釈と使い方は以下の通りです.
注意、Kotlinはどのように構造方法からFieldの注釈を指定するか
属性の表示
データ・クラスのプロパティの場合:この属性修飾子がpublicである場合、この属性はシーケンス化および逆シーケンス化することができる. プロパティの修飾子がpublicではない場合、getterメソッドおよびsetterメソッドはpublicであり、このプロパティはシーケンス化および逆シーケンス化可能である.getterメソッドはシーケンス化に使用され、setterメソッドは逆シーケンス化に使用されるためです. 属性がpublicのsetterメソッドのみで、publicのgetterメソッドがない場合、この属性は逆シーケンス化にのみ使用できます.
デフォルトの属性可視化のルールを変更するには、ObjectMapperのメソッドsetVisibilityを呼び出す必要があります.
属性フィルタ
属性フィルタリングによってプライバシー属性を遮断することができ、属性フィルタリングには多くの実現方法がある.注記 addMixInメソッド注記方式@JsonIgnoreProperties? SimpleBeanPropertyFilter方式?
https://www.ibm.com/developerworks/cn/java/jackson-advanced-application/index.html
Jacksonは主に以下のパッケージから構成されています
1. Jackson Databind , " " API ( ObjectMapper ) " " API (JsonNode); " " API " " API " " API
2. Jackson Core , " " API, JsonPaser JsonGenerator。 Jackson API JsonGenerator JsonParser json
3. Jackson Annotations ,
Kotlinプラグイン--jackson-module-kotlinhttps://github.com/FasterXML/jackson-module-kotlin
このモジュールは、Kotlinクラスとデータクラスのシーケンス化/逆シーケンス化のサポートを追加します.Jacksonの追加モジュールは、Kotlin言語、特にメソッド/コンストラクション関数パラメータ名の自省をサポートするために使用され、明示的な属性名コメントを追加する必要はありません.このモジュールは、Kotlinクラスとデータクラスのシーケンス化/逆シーケンス化のサポートを追加します.以前は、Jacksonがオブジェクトに逆シーケンス化できるように、Kotlinオブジェクトにデフォルトのコンストラクション関数が存在する必要がありました.このモジュールを使用すると、単一のコンストラクション関数クラスを自動的に使用できます.また、補助コンストラクション関数または静的ファクトリを持つクラスもサポートされます.
クイックスタート->ObjectMapper
databind.ObjectMapper
はJacksonがシーケンス化と逆シーケンス化を提供する主なクラスであり、その継承関係はpublic class ObjectMapper extends ObjectCodec implements Versioned
である.import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature
data class User(val name: String = "Unknown", val age: Int = 0)
var mapper = ObjectMapper()
fun main(args: Array) {
usage()
mapper.enable(SerializationFeature.INDENT_OUTPUT) // ,
usage()
}
fun usage() {
var json = """{"name":" "}"""
val syokaku = mapper.readValue(json, User::class.java)
println(" $json ->
$syokaku")
val ryubi = User(" ", 38)
json = mapper.writeValueAsString(ryubi)
println(" $ryubi ->
$json")
}
/*
{"name":" "} ->
User(name= , age=0)
User(name= , age=38) ->
{"name":" ","age":38}
{"name":" "} ->
User(name= , age=0)
User(name= , age=38) ->
{
"name" : " ",
"age" : 38
}
*/
SerializationFeature DeserializationFeature
(逆)シーケンス化列挙は、Javaオブジェクトの(逆)シーケンス化方式に影響する簡単なオン/オフ機能を定義します.
ObjectMapper#enable(SerializationFeature.INDENT_OUTPUT)
ObjectMapper#configure(SerializationFeature.INDENT_OUTPUT, ture)
ObjectMapper#configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) // Java
ObjectMapper#configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false) // yyyy-MM-dd'T'HH:mm:ss.SSSZ
ObjectMapper#setSerializationInclusion(Include.NON_NULL); // null
ObjectMapper#setDefaultPropertyInclusion(Include.NON_DEFAULT); //
SpringのObjectMapperを構成するにはどうすればいいですか?MappingJackson 2 HttpMessageConverterはgetterメソッドを提供しています
@Configuration
@EnableWebMvc
open class ServletConfig : WebMvcConfigurer {
override fun configureContentNegotiation(configurer: ContentNegotiationConfigurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8)
}
override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
global.log("Spring MVC ")
configurer.enable() // MVC Servlet
}
override fun configureMessageConverters(converters: MutableList>) {
val stringmc = StringHttpMessageConverter(Charsets.UTF_8)
stringmc.setWriteAcceptCharset(false)
converters.add(stringmc)
val jsonmc = MappingJackson2HttpMessageConverter()
val mapper = jsonmc.getObjectMapper()
mapper.configure(SerializationFeature.INDENT_OUTPUT, true)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
converters.add(jsonmc)
global.log(" ")
}
}
注釈
Jacksonは、Jacksonのデフォルト方式に従ってjavaオブジェクトをシーケンス化および逆シーケンス化し、実際の必要に応じてデフォルト方式を柔軟に調整するには、Jacksonの注釈を使用します.よく使われる注釈と使い方は以下の通りです.
@JsonProperty , 。 :
@JsonProperty("birth_ date")
private Date birthDate;
@JsonFormat , 。 :
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
public Date getBirthDate()
@JsonPropertyOrder , json , :
@JsonPropertyOrder({ "birth_Date", "name" })
public class Person
@JsonCreator , @JsonProperty , 。 :
@JsonCreator
public Person(@JsonProperty("name")String name) {…}
@JsonAnySetter , map
@JsonAnySetter
public void set(String key, Object value) {
map.put(key, value);
}
@JsonAnyGetter ,
public Map any() { return map; }
注意、Kotlinはどのように構造方法からFieldの注釈を指定するか
data class User(@field:JsonProperty(" ") var name: String = "Unknown", val age: Int = 0)
fun usage() {
val user = mapper.readValue("""{" ":" "}""", User::class.java)
println(user)
println(mapper.writeValueAsString(user))
}
/*
User(name= , age=0)
{
"age" : 0,
" " : " "
}
*/
属性の表示
データ・クラスのプロパティの場合:
デフォルトの属性可視化のルールを変更するには、ObjectMapperのメソッドsetVisibilityを呼び出す必要があります.
ObjectMapper#setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
PropertyAccessor ALL,CREATOR,FIELD,GETTER,IS_GETTER,NONE,SETTER
Visibility ANY,DEFAULT,NON_PRIVATE,NONE,PROTECTED_AND_PUBLIC,PUBLIC_ONLY
属性フィルタ
属性フィルタリングによってプライバシー属性を遮断することができ、属性フィルタリングには多くの実現方法がある.
// getter
@JsonIgnore
public int getAge()
// class
@JsonIgnoreProperties(value = { "age","birth_date" })
public class Person
FilterProvider filterProvider = new SimpleFilterProvider().addFilter("myFilter", newFilter);
mapper.setFilterProvider(filterProvider).writeValueAsString(?);
https://www.ibm.com/developerworks/cn/java/jackson-advanced-application/index.html