2017-09-22 2 views
1

厳しいjsonポリシーを必要とするプロジェクトがあります。jackson 2.9.xで0/1のtrue/falseへの変換を無効にする方法

例:

public class Foo { 
    private boolean test; 

    ... setters/getters ... 
} 

後JSONは動作するはずです:

{ 
    test: true 
} 

をして失敗する必要があり、次の(スロー例外):

{ 
    test: 1 
} 

同じのために:

{ 
    test: "1" 
} 

基本的には、誰かがtrueまたはfalseと異なるものを提供している場合、デシリアライズが失敗するようにします。残念ながら、jacksonは1を真とし、0falseと扱います。私はその奇妙な動作を無効にするデシリアライズ機能を見つけることができませんでした。 数字やブール値:

答えて

1

は二 表現からの強制型変換は、単純なテキスト以外のスカラ型のために許可されているかどうかを決定するdocs

から MapperFeature.ALLOW_COERCION_OF_SCALARS

機能を無効にできます。

あなたもそれがnullのために仕事をしたい場合は、DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVESMore Info

ObjectMapper mapper = new ObjectMapper(); 

//prevent any type as boolean 
mapper.disable(MapperFeature.ALLOW_COERCION_OF_SCALARS); 

// prevent null as false 
// mapper.enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES); 

System.out.println(mapper.readValue("{\"test\": true}", Foo.class)); 
System.out.println(mapper.readValue("{\"test\": 1}", Foo.class)); 

結果を有効:

Foo{test=true} 

Exception in thread "main" 
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot 
coerce Number (1) for type `boolean` (enable 
`MapperFeature.ALLOW_COERCION_OF_SCALARS` to allow) at [Source: 
(String)"{"test": 1}"; line: 1, column: 10] (through reference chain: 
Main2$Foo["test"]) 
+0

はそれは私が必要なもので、ありがとうございます。 –

関連する問題