序列化 jackson 设置 pojo 的默认类型

Serialize jackson setting the default type for a pojo

我有一个 pojo 如下:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = @class)
public class Shape {

public final String abc;
public final String xyz;

}

Rest api 接受 Shape 对象作为参数,其中我必须像这样传递对象:

{ @class = com.test.Shape, abc = "test1", xyz = "test2"}.

我希望json像

一样被传递
{ abc = "test1", xyz = "test2"}

基本上,我想在不传递@class键的情况下反序列化pojo。

在你的Rest中API,你可以把@RequestBody @Validated放在Shape参数之前。 喜欢

    @PostMapping("/test")
    public void api(@RequestBody @Validated Shape shape){
    todo
    }

需要注意的是@RequestBody需要在post请求下生效

我可以通过在配置文件中添加 sprint 属性 来解决这个问题:

spring.jackson.mapper.USE_BASE_TYPE_AS_DEFAULT_IMPL: true

以下是相同的参考资料: https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.spring-mvc.customize-jackson-objectmapper