Jackson deserialization error: MismatchedInputException
Jackson deserialization error: MismatchedInputException
我有以下class
public class Cart {
private final String id;
public Cart(String id) { this.id = id;}
public String getId() { return id; }
}
以及以下测试:
String jsonString = "{\"id\":\"56c7b5f7-115b-4cb9-9658-acb7b849d5d5\"}";
Cart cart = mapper.readValue(jsonString, Cart.class);
assertThat(cart.getId()).isEqualTo("56c7b5f7-115b-4cb9-9658-acb7b849d5d5");
我收到以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot
construct instance of
com.store.domain.model.Cart
(although at least
one Creator exists): cannot deserialize from Object value (no
delegate- or property-based Creator) at [Source:
(String)"{"id":"56c7b5f7-115b-4cb9-9658-acb7b849d5d5"}"; line: 1,
column: 2]
我不知道这里出了什么问题。有什么帮助吗?
您应该添加一个没有任何参数的普通构造函数,如下所示:
public Cart() { }
您需要将 bean 定义为:
public class Cart {
private final String id;
@JsonCreator
public Cart(@JsonProperty("id") String id) { this.id = id;}
public String getId() { return id; }
}
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"id\":\"56c7b5f7-115b-4cb9-9658-acb7b849d5d5\"}";
Cart cart = mapper.readValue(jsonString, Cart.class);
System.out.println(mapper.writeValueAsString(cart));
}
输出
{"id":"56c7b5f7-115b-4cb9-9658-acb7b849d5d5"}
默认情况下 Jackson
使用默认构造函数和 setter / getter 方法创建任何 class 的实例。
由于您的 bean 是不可变的,即没有默认构造函数和 setter,您需要明确告诉 Jackson
如何使用 @JsonCreator
创建 Cart
class 的实例以及如何使用 @JsonProperty
.
设置属性值
我有以下class
public class Cart {
private final String id;
public Cart(String id) { this.id = id;}
public String getId() { return id; }
}
以及以下测试:
String jsonString = "{\"id\":\"56c7b5f7-115b-4cb9-9658-acb7b849d5d5\"}";
Cart cart = mapper.readValue(jsonString, Cart.class);
assertThat(cart.getId()).isEqualTo("56c7b5f7-115b-4cb9-9658-acb7b849d5d5");
我收到以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of
com.store.domain.model.Cart
(although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (String)"{"id":"56c7b5f7-115b-4cb9-9658-acb7b849d5d5"}"; line: 1, column: 2]
我不知道这里出了什么问题。有什么帮助吗?
您应该添加一个没有任何参数的普通构造函数,如下所示:
public Cart() { }
您需要将 bean 定义为:
public class Cart {
private final String id;
@JsonCreator
public Cart(@JsonProperty("id") String id) { this.id = id;}
public String getId() { return id; }
}
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"id\":\"56c7b5f7-115b-4cb9-9658-acb7b849d5d5\"}";
Cart cart = mapper.readValue(jsonString, Cart.class);
System.out.println(mapper.writeValueAsString(cart));
}
输出
{"id":"56c7b5f7-115b-4cb9-9658-acb7b849d5d5"}
默认情况下 Jackson
使用默认构造函数和 setter / getter 方法创建任何 class 的实例。
由于您的 bean 是不可变的,即没有默认构造函数和 setter,您需要明确告诉 Jackson
如何使用 @JsonCreator
创建 Cart
class 的实例以及如何使用 @JsonProperty
.