gpt4 book ai didi

java - jackson 反序列化可选抛出 NoSuchFieldError

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:31 32 4
gpt4 key购买 nike

我开发了一个 Spring Boot 应用程序,我试图包含一个 Optional<String> ( java.lang ) 字段在我的一个模型中,所以如果 @RestController我正在使用 with 不会得到这样的字段,它会将其作为 Optional.empty() 包含在内.每次我通过 POST 调用该方法时,我都会得到一个 java.lang.NoSuchFieldError: _valueInstantiator异常(exception)。我开始试验并制作了一个精简版的反序列化器,它仍然给我错误:

模型:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.Optional;

@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Test {
private int id;
private String name;
private Optional<String> nickname;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Optional<String> getNickname() {
return nickname;
}

public void setNickname(Optional<String> nickname) {
this.nickname = nickname;
}
}

反序列化片段:

ObjectMapper mapper = new ObjectMapper();
Jdk8Module j = new Jdk8Module();
j.configureAbsentsAsNulls(true);//tried using true and false too
mapper.registerModule(j);
mapper.setSerializationInclusion(JsonInclude.Include.USE_DEFAULTS);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);


mapper.readValue("{\"id\":1, \"name\":\"a\", \"nickname\":\"asd\"}", Test.class);

如果我不包括 nickname属性(property),它仍然给我同样的错误。 enter image description here

jackson 版本:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

...

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.9.2</version>
</dependency>

用这个 Controller 试过(同样的异常(exception)):

  @RequestMapping(value = "/test",method = RequestMethod.POST)
public Test test(
@RequestBody Test test
) {
return test;//<-- did not even reach the breakpoint here
}

最佳答案

通过最初运行您的代码,我发现代码在 jackson-datatype-jdk8 的 2.8.6 版本上运行良好,但在您使用的版本(即 2.9.2)上运行不佳。使用下面的依赖

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.8.6</version>
</dependency>

关于java - jackson 反序列化可选抛出 NoSuchFieldError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47132810/

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