我有一个用于 ObjectMapper 的 spring bean,它有一个配置:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
我上课时里面有地图:
@Getter
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
private Map<String, Object> value = new HashMap<>();
}
地图看起来像:
{
"value" : {
"a": null,
"b": "notnull",
"c" : [ {
"c1" : null
}, {
"c2" : "abc"
} ]
}
}
当我调用休息端点时,响应如下所示:
"value": {
"b": "notnull",
"c": [
{},
{
"c2": "abc"
}
]
}
}
我尝试更新特定于我的班级的配置:
JsonInclude.Include nonDefaultInclude = JsonInclude.Include.ALWAYS;
JsonInclude.Value includeValue = JsonInclude.Value.construct(nonDefaultInclude, nonDefaultInclude);
mapper.configOverride(MyClass.class).setIncludeAsProperty(includeValue);
但它不起作用,无论它是否有效,如果我这样做:
JsonInclude.Include nonDefaultInclude = JsonInclude.Include.ALWAYS;
JsonInclude.Value includeValue = JsonInclude.Value.construct(nonDefaultInclude, nonDefaultInclude);
mapper.configOverride(Map.class).setIncludeAsProperty(includeValue);
我也尝试使用第一种方法并将@JsonIninclude放在里面的地图上 - 没有运气
如果我使用第二种方法,那么我将覆盖项目中的所有地图 - 没办法做到这一点。
有什么方法可以实现我的目标吗?
您可以从
application.properties
文件控制 Jackson ObjectMapper 的行为。要始终包含字段,无论其值如何,请设置以下配置值:
spring.jackson.default-property-inclusion=always