Java 14记录json序列化



目前正在试验java 14中的Records实现,一切看起来都很好,但由于访问器略有不同,jackson无法反序列化,并给出以下错误:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.x.x.x.xTracking and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

我查看了互联网上的所有内容,包括jackson和gson github,以查看jep359的支持,但没有找到任何评论。我是不是直接错过了什么?

是的,我知道java14还没有发布,记录在这个版本中只是预览,但至少会有一些评论。

Jackson 2.12.0增加了对唱片的支持(https://github.com/FasterXML/jackson-future-ideas/issues/46)。它将在未来几天发布。

带有"纯";Json-B你可以这样做:

public class RecordPropertyVisibilityStrategy implements PropertyVisibilityStrategy {
@Override
public boolean isVisible(Field field) {return true;}
@Override
public boolean isVisible(Method method) {return false;}
}

然后

@JsonbVisibility(RecordPropertyVisibilityStrategy.class)
public record MyRecord(Long id, String attr) {}

对于其他人的实验,我并不自豪地四处寻找:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer(){
return builder ->
builder.visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}

我让Jackson在Spring Boot 2.4.1应用程序中处理这个问题,用注释记录

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)

或者,对于Spring Boot 2.4.5和Java 16,它可以通过application.properties启用,如下所示:

spring.jackson.visibility.field=any

请参阅有关Spring Boot文档的更多信息。

最新更新