2017-02-10 10 views
0

私はJSONマーシャリング/アンマーシャリングを行うためにjackson 2.6.3を使用しています。フィールドがペイロードにない場合、フィールドのセッターは呼び出されません。フィールドがペイロードにない場合、いくつかのデフォルト値をプラグインする必要があります。また、いくつかのビジネスロジックチェック。セッターに入れないとどこに置くかわからない。スプリングブート1.4.0を使用する。特定のフィールドをデシリアライズするには、それがヌルであってもjacksonに強制しますか?

任意のヒント/手がかりは深くあなたは、コンストラクタのパラメータのコンストラクタと@JsonPropertyに@JsonCreatorでパラメータ化コンストラクタを使用することができます

+0

[ジャクソンとマッピングするときにデフォルト値をnullフィールドに設定する](http://stackoverflow.com/questions/18805455/setting-default-values-to-null-fields-when-mapping-with-jackson)の可能な複製) – Henrik

答えて

0

を高く評価しています。それから、Jacksonは、たとえ属性がnullであっても、常にこのコンストラクタをデシリアライズすることになります。値がnullの場合、またはビジネスロジックチェックを行うことができる場合でも、デフォルト値を設定できます。

サンプル:

public class Person { 
    private Integer id; 
    private String name; 

    @JsonCreator 
    public Person(@JsonProperty(value = "id") Integer id, @JsonProperty(value = "name") String name) { 
     this.id = id != null ? id : Integer.valueOf(1); //setting default 
     this.name = name; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 
0

あなたがfalseにDeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESを使用することができます。

スプリングのWebMvcConfigrationAdaptorクラスを拡張してHttpMessageConverterを追加することで、スプリングブートの自動構成を無効にする必要がある場合、この構成では、非直列化時の不明なプロパティはすべて無視されます。

@Configuration 
class WebConfiguration extends WebMvcConfigurerAdapter{ 



    @Override 
    public void configureMessageConverters(
      List<HttpMessageConverter<?>> converters) { 
     Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 
     builder.indentOutput(true).dateFormat(
       new SimpleDateFormat("yyyy-MM-dd")); 

     converters.add(new MappingJackson2HttpMessageConverter(builder.build() 
       .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, 
         false))); 


    } 
} 

希望します。

関連する問題