2017-11-17 1 views
0

私は、Spring Boot 1.5.7とJackson 2.8を使用した非常に簡単なREST APIプロジェクトを持っています。ジャクソンはデフォルトで不明なフィールドを間違って無視しています

問題

私はジャクソンが文句を言うと、要求で不明なフィールドがある場合は例外を発生します。私はそれを無視するようなことを設定していませんが、それを無視するだけで、理由はわかりません。

要求:

{ 
    "appId":1, 
    "version":"1.0", 
    "status":true, 
    "locked":false, 
    "field": "it is ignored, but it must not be" 
} 

Requet方法

@PutMapping 
public ResponseEntity<?> updateAppToggle(@RequestBody AppToggleUpdateRequest request) { 
    AppToggle updatedAppToggle = service.update(request); 
    return new ResponseEntity<AppToggleResponse> 
     (AppToggleResponse.fillResponse(updatedAppToggle), HttpStatus.OK); 
    } 

Requestクラス

@Data 
public class AppToggleUpdateRequest { 

    @NotNull 
    @Getter 
    private Long appId; 

    @NotNull 
    @Getter 
    private String version; 

    private Boolean status; 

    private Boolean locked; 
} 

マイapplication.prop ertiesには特別なものは含まれておらず、H2のメモリ内のデータベース用のデータソースといくつかのものが含まれています。

私は実際に何が起こっているのか分かりません。どんな助けでも本当に感謝します。

+0

仕様は明示的FAIL_ON_UNKNOWN_PROPERTIES'は 'と言うので、基本的には、それは奇妙ですデフォルトでオンになっています。それらのどれも確かですか:https://howtoprogram.xyz/2017/02/18/ignore-exclude-new-fields-deserializing-jackson/あなたのコードに適用されますか? –

+0

私が言ったように、私のアプリケーションは非常にシンプルです(それは学習目的のためです)、私はすぐにすべてを使用しています。私は[this](https://stackoverflow.com/a/22874949/4319922)のような解決策を試すことができましたが、一言で言えば、私が期待する動作はデフォルトでは設定されていますがそれは私のアプリケーションに含まれていないようです。 – StatelessDev

答えて

0

を私はapplication.propertiesファイルに以下を追加私のアプリケーションを固定:

spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true 
+1

これは、Spring Bootが何が受け入れられ、何が生成されているかについて緩和されるために、不明なプロパティでの失敗を無効にするために必要です。https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle /#howto-customize-the-jackson-objectmapper –

0

は、あなたはこれを試してみました:

@JsonIgnoreProperties(ignoreUnknown = true) 
@Data 
public class AppToggleUpdateRequest { .. } 
+0

私は自分のアプリケーションが既知のフィールドだけを受け入れるようにしたいが、役に立たないので、これを "false"に設定しようとしました。 – StatelessDev

関連する問題