gson Java 14记录json序列化

cvxl0en2  于 2022-11-06  发布在  Java
关注(0)|答案(5)|浏览(183)

目前正在试验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检查jep 359的支持,但没有找到一个单一的评论。我错过了什么真的很直接?
是的,我知道java 14还没有发布,记录只是在这个版本的预览,但希望至少有一些评论。

cu6pst1q

cu6pst1q1#

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

t5fffqht

t5fffqht2#

对于其他人的实验,我并不自豪地做了以下几点:

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

vbopmzt13#

使用“pure”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) {}
fd3cxomn

fd3cxomn4#

我做了Jackson在Sping Boot 2.4.1应用程序中处理这个问题,用

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
aydmsdu9

aydmsdu95#

或者,对于Sping Boot 2.4.5和Java 16,可以通过application.properties启用它,如下所示:
spring.jackson.visibility.field=any
请参阅Sping Boot 文档中的详细信息。

相关问题