Jackson 1.9.9は、スカラー値(bool、int、string)に解析する内容に多少の一貫性がありません。すべての配列またはオブジェクト型は失敗しますが、任意のスカラー型を文字列に入れることができます。boolの場合、0ではなく0がfalse/trueにマップされます。int属性は数値のみを受け入れます。
public class Foo { public String s; public boolean b; public int i; }
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue("{\"s\":\"abc\"}", Foo.class).s); // "abc"
System.out.println(mapper.readValue("{\"s\":true}", Foo.class).s); // "true"
System.out.println(mapper.readValue("{\"s\":123}", Foo.class).s); // "123"
System.out.println(mapper.readValue("{\"b\":123}", Foo.class).b); // true
System.out.println(mapper.readValue("{\"b\":0}", Foo.class).b); // false
System.out.println(mapper.readValue("{\"b\":\"abc\"}", Foo.class).b); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"i\":\"abc\"}", Foo.class).i); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"i\":true}", Foo.class).i); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"s\":[]}", Foo.class).s); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"s\":{}}", Foo.class).s); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"b\":[]}", Foo.class).b); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"b\":{}}", Foo.class).b); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"i\":[]}", Foo.class).i); // fails with JsonMappingException
System.out.println(mapper.readValue("{\"i\":{}}", Foo.class).i); // fails with JsonMappingException
たとえばブール値をString属性に渡した場合にエラーが発生するように、Jacksonに厳密なモードはありますか?
私はこれをJAX-RSプロジェクトで使用していますが、すべてではありませんがほとんどのエラーが発生するため、Jacksonによってスローされた例外に基づくエラー報告がやや困難になります。生のObjectNodeを取得して、すべてを手動でチェックすることは避けたいと思います。呼び出し元が文字列のブール値を渡した場合、これはプログラミングエラーである可能性が高いため、彼に伝えたいと思います。