据我所知,杰克逊会
>
将公共实例变量序列化为变量名
<代码>公共列表
序列化到
<代码>{“myStrings”:[…]}
如果私有实例变量具有名为getVariable()
的公共getter,则将其序列化为变量名:
private List<String> myStrings = new ArrayList<>();
public List<String> getMyStrings() { return myStrings; }
序列化类似于
<代码>{“myStrings”:[…]}
然而,我试图实现的是基于另一种方法将其序列化为字符串(而不是字符串数组),但在某些情况下保留JSON键(基于JsonInclude(JsonInclude.Include.NON\u NULL)抑制原始访问器
@JsonInclude(JsonInclude.Include.NON_NULL)
private boolean firstStringOnly = true;
private List<String> myStrings = new ArrayList<>();
public List<String> getMyStrings() { return firstStringOnly ? null: myStrings; }
public String getFirstString() { return firstStringOnly ? myStrings.get(0) : null; }
所需的JSON序列化:
>
对于firstStringOnly==true:{“myStrings”:“first\u String”}(使用getFirstString())
对于firstStringOnly==false:{“myStrings”:[…]}
(使用getMyStrings()
)
这可能吗?我特别希望避免使用自定义序列化程序,并且只通过注释来实现这一点。
您可以假设Jackson和Java 8的最新版本。
只是重复一下,问题约束是:
编辑:对不起,我误解了你最初的问题。我假设你想保留两个键入的getter。这对你有用吗?
public class TestClass {
private boolean firstStringOnly = true;
private List<String> myStrings = new ArrayList<>();
@JsonIgnore
public boolean isFirstStringOnly() {
return firstStringOnly;
}
public void setFirstStringOnly(boolean firstStringOnly) {
this.firstStringOnly = firstStringOnly;
}
@JsonIgnore
public List<String> getMyStrings() {
return firstStringOnly ? null : myStrings;
}
@JsonIgnore
public String getFirstString() { return firstStringOnly ? myStrings.get(0) : null; }
@JsonProperty("myStrings")
public Object getMyStringsForSerialization() {
return firstStringOnly ? getFirstString() : getMyStrings();
}
public void setMyStrings(List<String> myStrings) {
this.myStrings = myStrings;
}
您可以泛化getMyStrings()方法并使其返回对象。并在内部检查标志并返回第一个值或所有值。这是我的样品
public class tst {
private static class YourObject {
private boolean firstStringOnly;
private List<String> myStrings = new ArrayList<>();
public YourObject(boolean firstStringOnly) {
this.firstStringOnly = firstStringOnly;
this.myStrings.add("str1");
this.myStrings.add("str2");
}
public Object getMyStrings(){
return firstStringOnly ? myStrings.get(0) : myStrings;
}
}
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new YourObject(true)));
System.out.println(mapper.writeValueAsString(new YourObject(false)));
}
}
输出为
{"myStrings":"str1"}
{"myStrings":["str1","str2"]}
我有一个类(消息),它有一些实例变量。其中一个变量的类型是interface(MessageContent)。在将这个类序列化为json的过程中,我希望使用依赖于实现的名称序列化这个变量(内容)。下面是详细信息的代码片段: 我的要求是,当消息序列化并且内容类型为VideoMessage时,序列化的json应该是: 如何通过fasterxml Jackson实现?我正在使用ObjectMapper的
序列化和反序列化的方式不同于 我已经创建了两个序列化程序 和 我用Jackson查看了序列化/反序列化映射 ,但找不到解决方案。
在 Go 语言中通过首字母大小写来控制变量、函数、方法、类型的公私有 如果首字母小写,那么代表私有,仅在当前包中可以使用 如果首字母大写,那么代表共有,其它包中也可以使用 package demo import "fmt" var num1 int = 123 // 当前包可用 var Num1 int = 123 // 其它包也可用 type person struct {
根据本·施耐德曼(Ben Shneiderman)的分类,信息可视化的数据分为:一维数据、二维数据、三维数据、多维数据、时态数据、层次数据和网络数据。大数据可视化研究的领域主要包含:多维数据、时态数据、层次数据和网络数据。 时态数据的可视化 时间数据广泛存在于不同的应用中,例如医疗记录、项目管理或历史介绍。数据集中的每一项包含时间信息,如开始和结束时间。用户潜在的需求是搜索在某些事件或时刻之间、之
我的Spring Boot API使用camelCase,但我需要通过我的API将一些请求代理到使用snake_case的第三方API。是否可以将Jackson配置为从snake_case反序列化第三方响应,然后将其序列化回camelCase到我的前端? 所需功能的逐步示例: 示例对象: 我调用我的API API调用第三方 第三方返回 我的API将其反序列化为 我的API序列化对象并返回 现在我使
我有一个现有的C#泛型类,希望根据使用的类型添加或删除一个方法,我解释道 对于特定的