2017-03-18 12 views
1

application.properties でspring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES = trueを使用して、未知のプロパティでデシリアライズが失敗するが動作しないようにします。Spring Boot 1.4内部ジャーナルの逆シリアル化をカスタマイズする

私も

@Bean 
ObjectMapper objectMapper() { 
    return Jackson2ObjectMapperBuilder 
     .json() 
     .featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) 
     .build(); 
} 

を使用してみましたが、これもうまくいきませんでした。私は何が欠けていますか?

+0

デシリアライズしようとしているオブジェクトとコードを投稿できますか? – developer

+0

この質問のように 'Jackson2ObjectMapperBuilder'を定義すると動作しますか?https://stackoverflow.com/questions/34545997/put-and-post-fail-on-unknown-properties-spring-different-behavior? – Infinity

+0

@Infinity素早く返信いただきありがとうございます。私もそれを試みたが、うまくいきませんでした。これは、Spring-Boot Web依存関係とPUTリクエストメソッドを持つプレーンなプロジェクトで、ユーザーを更新します(データベースを使用していないので、メソッドをテストするために更新要求を記録しています)付加的な注釈のないユーザモデル。 – Kiba

答えて

1

FAIL_ON_UNKNOWN_PROPERTIESオプションは、デフォルトではJackson Documentationに該当します。

この設定を無効にする場合は、このオプションをapplication.propertiesに追加することができます。

spring.jackson.deserialization.fail-on-unknown-properties = false 

しかし、デフォルト設定では期待どおりに機能します。何も設定する必要はありません。

これは、1つのファイルバネブートアプリケーションです:

@RestController 
@SpringBootApplication 
public class TestOptionApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestOptionApplication.class, args); 
    } 

    @PostMapping("/test") 
    public void formTest(@RequestBody final HelloForm form) { 
    } 

    public static class HelloForm { 

     private String name; 

     public String getName() { return name; } 

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

これは、未知の性質に拒絶反応をテストするための統合テストです。

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class TestOptionApplicationTest { 

    @Autowired 
    private WebApplicationContext context; 

    @Test 
    public void testFailOnUnknownPropertiesOption() throws Exception { 

     final String text = "{\"name\": \"test\", \"title\": \"test\"}"; 

     MockMvcBuilders 
      .webAppContextSetup(this.context) 
      .build() 
      .perform(post("/test").contentType(MediaType.APPLICATION_JSON).content(text)) 
      .andExpect(status().isBadRequest()); 
    } 
} 

タイトルプロパティが定義されていません。したがって、コントローラはBadRequestを送信します。

+1

すぐにお返事ありがとうございます。それは今働いて、私はm2のキャッシュをクリアし、それを再構築、多分それはバージョンの問題だった。私はそれを引き起こしていたことを後でチェックします。私はこれを答えとしてマークします。 – Kiba

1

スプリングブートでは、デフォルトでは、デシリアライズ時に不明なプロパティは無視されます。これらの特性を無視しないようにするために、次のことができ :

@Bean 
public ObjectMapper objectMapper() { 
    return Jackson2ObjectMapperBuilder 
    .json() 
    .featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) 
    .build(); 
} 
  • 使用このBean:

    @Bean 
    public Jackson2ObjectMapperBuilder objectMapperBuilder(){ 
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 
        builder.failOnUnknownProperties(true); 
        return builder; 
    } 
    
    • application.properties
    • 使用このBeanでspring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=trueを追加します

    私はこれらのソリューションをテストしたので、コードに別の問題があります。 javaguyさんからの質問でコードを投稿できますか?

    +0

    すぐにお返事ありがとうございます。それは今働いて、私はm2のキャッシュをクリアし、それを再構築、多分それはバージョンの問題だった。私はそれを引き起こしていたことを後でチェックします。私は、あなたとフィラトの男の回答を答えとして記入することができません。しかし、クイック返信ありがとう:)。 – Kiba

    関連する問題