序列化 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
我有一个 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