对象映射程序仍包含空值。我尝试了很多在这里找到的解决方案,但都没有用。我不能使用json注释,所以我唯一的解决方案是mapper的预定义设置,但是这没有反映出来。我认为这是由于对象映射器的缓存。但是我对映射器的唯一修改是在构造函数中进行的。所以缓存不是问题
依赖关系:
Log4J2: 2.17.1
Fasterxml Jackson annotation: 2.13.2
Fasterxml Jackson databind: 2.13.2
Wildfly: 20.0.1
OpenJDK: 11.0.14.1
我有一个定义为全局值的objectMapper,它在构造函数中被实例化。然后我有一个方法来构建接受键和值的JSON。因为价值可以由任何东西决定。
private final ObjectMapper jsonMapper;
public SomeConstructor() {
this.jsonMapper = new ObjectMapper();
this.jsonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
this.jsonMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
}
@Override
public void setJsonVar(String jsonVar, String jsonKey, Object values) {
// loads ObjectNode from memory if exists
ObjectNode jsonNode = getJsonVar(jsonVar);
// lazy init if ObjectNode not exists
if (jsonNode == null) {
jsonNode = jsonMapper.createObjectNode();
}
// add object
jsonNode.putPOJO(jsonKey, values);
}
用法:
setJsonVar("var-A", "key-A", 1);
setJsonVar("var-A", "key-B", null);
print("var-a");
期望:
我想在JSON中避免空值。
预期:var-A:{"key-A": 1}
得到:var-A:{"key-A": 1,"key-B": null}
为什么会发生这种情况?我能做些什么来解决这个问题?
例如,此选项适用于序列化对象、自定义对象或 Map
时,但不适用于使用 json 树时。考虑这个 Foo
类:
public class Foo {
private String id;
private String name;
//getters and setters
}
排除空值的选项将按预期使用它。
说明它的主要方法:
public class Main {
public static void main(String[] args) throws Exception {
serializeNulls();
System.out.println();
doNotSerializeNulls();
}
private static void serializeNulls() throws Exception {
ObjectMapper jsonMapper = new ObjectMapper();
Foo foo = new Foo();
foo.setId("id");
System.out.println("Serialize nulls");
System.out.println(jsonMapper.writeValueAsString(foo));
Map<String, Object> map = new LinkedHashMap<>();
map.put("key1", "val1");
map.put("key2", null);
System.out.println(jsonMapper.writeValueAsString(map));
}
private static void doNotSerializeNulls() throws Exception {
ObjectMapper jsonMapper = new ObjectMapper();
jsonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
jsonMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
Foo foo = new Foo();
foo.setId("id");
System.out.println("Do not serialize nulls");
System.out.println(jsonMapper.writeValueAsString(foo));
Map<String, Object> map = new LinkedHashMap<>();
map.put("key1", "val1");
map.put("key2", null);
System.out.println(jsonMapper.writeValueAsString(map));
}
}
问题内容: 我正在尝试学习钩子,该方法使我感到困惑。我正在将初始值分配给数组形式的状态。即使使用或,in中的set方法对我也不起作用。我已经在另一台PC上创建了一个API,该API正在调用并获取要设置为状态的数据。 这是我的代码: 的以及不工作。可以在这里使用一些帮助。 我希望将结果变量推入movies数组中。 问题答案: 类似于通过扩展或创建的Class组件中的setState,使用钩子提供的更
为了测试不同时区的影响,我更改了日期 我的手机已连接到Wifi,但未登录到移动网络。 这是预期的行为吗?我不确定下面的“本地”指的是什么: 构造一个DateTime实例,其中包含本地时区中的当前日期和时间。 还有其他方法可以获得电话时间吗? 颤振医生 示例应用程序
4.5.1 rosrun设置话题重映射 rosrun名称重映射语法: rorun 包名 节点名 话题名:=新话题名称 实现teleop_twist_keyboard与乌龟显示节点通信方案由两种: 1.方案1 将 teleop_twist_keyboard 节点的话题设置为/turtle1/cmd_vel 启动键盘控制节点:rosrun teleop_twist_keyboard teleop_tw
它要做什么 该设置指定了 FreeMarker 的版本号,那么就不会100%向后兼容bug修复和改进 你想要启用 已经实现的内容。 通常来说,默认把它留在2.3.0(最大向后兼容版本)是一个坏主意。 在新项目中,应该将它设置为实际使用的FreeMarker版本号。 而在老项目中,那么最好也将它设置的高一些,最好检查一下哪些修改是激活状态(可以在 Configuration(Version) 构造方
假设我在Fedora中以的身份登录,我将从Dockerfile构建Docker映像。该映像将包含一个LAMP环境。我有一个Apache虚拟主机(VH)默认文件,如下所示: 作为构建过程的一部分,该文件被复制到图像上的适当位置。 我可以从主机获取登录用户名并动态设置到此VH吗?最后,我希望得到以下结果: 我知道我可以从bash中使用获取当前用户的值,但我如何在Docker构建中将其插入/设置到VH文
当我尝试使用Composer客户端将软件包安装到Contao时,我收到一个错误: 致命错误:第220行的phar://D:/wamp/www/myproject/composer/composer.phar/src/composer/dependencysolver/Solver.php中允许的内存大小为1073741824字节(尝试分配134217728字节) 我真的很困惑。我的PHP内存限制设