我正在努力解決一個問題:如果沒有映射任何欄位,是否可以將 Jackson 配置為拋出錯誤?
示例:反序列化一個空物件(“{}”)或沒有目標物件包含的任何欄位。
uj5u.com熱心網友回復:
在獲得 Jackson 反序列化 api 后,我總是檢查某些欄位是否為空。但我認為你可以擴展杰克遜反序列化器來重寫反序列化方法來達到你的目的。
uj5u.com熱心網友回復:
檢查它是否等于空物件:
@NoArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
@JsonIgnoreProperties
public class Foo {
private String a;
private String b;
private String c;
private String d;
}
public class FooMain {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final Foo EMPTY_FOO = new Foo();
public static void main(String[] args) {
try {
// This attempt will throw an exception:
Optional.ofNullable(OBJECT_MAPPER.readValue("{}", Foo.class))
.filter(foo1 -> !foo1.equals(EMPTY_FOO))
.orElseThrow(IllegalArgumentException::new);
// This attempt will not throw an exception:
Optional.ofNullable(OBJECT_MAPPER.readValue("{a:\"123\"}", Foo.class))
.filter(foo1 -> !foo1.equals(EMPTY_FOO))
.orElseThrow(IllegalArgumentException::new);
} catch (JsonProcessingException e) {
// cannot deserialize json string to FOO
}
}
}
uj5u.com熱心網友回復:
如果需要所有來自一組欄位:
如果使用建構式對物件進行反序列化,則可以required從@JsonProperty注釋中使用。
例如,對于一個 class Foo,一個欄位name是必需的:
class Foo
{
String name;
Integer number;
@JsonCreator
public Foo(
@JsonProperty(value = "name", required = true) String name,
@JsonProperty(value = "number") Integer number)
{
this.name = name;
this.number = number;
}
// ... more methods ...
}
當嘗試從沒有name屬性的 JSON 反序列化時,它將失敗并顯示MismatchedInputException:
objectMapper.readValue("{}", Foo.class); // FAILURE
請注意,如果 JSON 物件將欄位顯式設定為null,它將成功:
objectMapper.readValue("{\"name\": null}", Foo.class); // SUCCESS
如果必須存在一組欄位中的任何一個:
這是前一種情況的簡單變體,因為我們可以將驗證邏輯放在@JsonCreator-annotated 建構式中。
例如:
class Foo
{
String name;
Integer number;
@JsonCreator
public Foo(
@JsonProperty("name") String name,
@JsonProperty("number") Integer number)
{
if (name == null && number == null)
throw new IllegalArgumentException("at least one of (name, number) fields must be non-null");
this.name = name;
this.number = number;
}
// ... more methods ...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479453.html
上一篇:如何拆分兩個json字串
