gpt4 book ai didi

java - 使用 jackson 将 json 字符串映射到对象将抛出 MismatchedInputException

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:59 25 4
gpt4 key购买 nike

我有一个简单的类

public class AuthenticationToken {

public String token;

public AuthenticationToken(String token) {
this.token = token;
}

public String getToken() {
return token;
}

public void setToken(String token) {
this.token = token;
}
}

对于 jackson,我试图将一个字符串映射到这个对象,就像这样

private String input = "{\"token\":\"adf\"}";


@Test
public void whenJsonString_ThenCreateAuthenticationObject() throws IOException {

ObjectMapper jsonMapper = new ObjectMapper();
AuthenticationToken tokenObject = jsonMapper.readValue(input, AuthenticationToken.class);
assertThat(tokenObject).isNotNull();
}

但是它抛出如下异常

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `foo.AuthenticationToken` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"token":"adf"}"; line: 1, column: 2]

我试图将我的 AuthenticationToken 中的属性注释为 @JsonProperty 但这也导致了此异常。

最佳答案

Jackson 默认需要一个“empty”构造函数,并会自动通过为每个字段提供的 getter 和 setter 填充您的对象。

因此删除构造函数的参数已经解决了您的问题:

public class AuthenticationToken {

public String token;

public AuthenticationToken() {}

public String getToken() {
return token;
}

public void setToken(String token) {
this.token = token;
}
}

如果你想保持当前的构造函数不变,你也可以只添加一个额外的空构造函数。测试了您的测试用例的两个选项,都工作正常。

关于java - 使用 jackson 将 json 字符串映射到对象将抛出 MismatchedInputException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com