映射器:
public static ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.enable(SerializationFeature.INDENT_OUTPUT);
要序列化的类:
@Builder(builderClassName = "GooglePlayGameBuilder", toBuilder = true)
@JsonDeserialize(builder = GooglePlayGame.GooglePlayGameBuilder.class)
public final class GooglePlayGame {
@JsonProperty("Title") private final String title;
@JsonProperty("Genre") private final String genre;
@JsonProperty("Price") private final String price;
@JsonProperty("Last updated") private final String lastUpdated;
@JsonProperty("Current version") private final String currentVersion;
@JsonProperty("Requirements") private final String requiresAndroid;
@JsonProperty("IAP") private final String IAP;
@JsonProperty("Contacts") private final String devEmail;
...
public static volatile ConcurrentMap<String, GooglePlayGame> games = new ConcurrentSkipListMap<>(String.CASE_INSENSITIVE_ORDER);
public static void saveLibraryToFile(){
try {
mapper.writeValue(new File(LIBRARY_FILENAME), games);
} catch (IOException e) {
log.error("[Couldn't write to file] ", e.getMessage());
}
}
{
"Never Alone: Ki Edition" : {
"Title" : "Never Alone: Ki Edition",
"Genre" : "Adventures",
"Price" : "4,99 €",
"Last updated" : "September 15, 2016",
"Current version" : "1.0.0",
"Requirements" : "2.3+",
"IAP" : "nope",
"Contacts" : "support@neveralonegame.com"
},
...
{
"Never Alone: Ki Edition" : {
"iap" : "nope"
"Title" : "Never Alone: Ki Edition",
"Genre" : "Adventures",
"Price" : "4,99 €",
"Last updated" : "September 15, 2016",
"Current version" : "1.0.0",
"Requirements" : "2.3+",
"IAP" : "nope",
"Contacts" : "support@neveralonegame.com"
},
我不懂这个领域:
"iap" : "nope"
从Jackson那里找到的?我用日志检查了我的本地地图,结果发现这个字段不存在,但在序列化过程中它出现了。
Lombok将为字段IAP
创建一个名为getIAP()
的getter方法。然后,Jackson将自动检测它作为一个名为iap
的属性。由于属性名称区分大小写,因此这是一个不同于@JSONProperty(“IAP”)
注释定义的IAP
属性的属性。
您有两种选择:
>
将字段重命名为iap
,保持注释不变。
推荐使用,因为这遵循Java命名标准。
@JsonAutoDetect(getterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
这阻止了Jackson从getter方法自动检测属性,即只有带有@jsonproperty
注释的getter方法才会定义属性。由于Lombok创建的getter中没有一个具有该注释,因此其效果是只有带注释的字段才会定义属性。
问题内容: 我找不到在Gson进行序列化期间添加自定义字段的简单方法,我希望其他人可以提供帮助。 这是一个示例类来展示我的问题: 当我序列化类AI时,想返回以下内容: 其中url_to_user未存储在我的类A的实例中,但可以与数据一起在类A的实例中生成。 有没有简单的方法可以做到这一点?我宁愿避免只添加一个字段就编写整个序列化程序。 问题答案: 用得到,用它可以动态交互。
杰克逊v1。9.13 spring 3.2.0嗨,我花了好几天的时间试图弄清楚如何在序列化期间从bean向JSON中添加字段。 这似乎是一个非常基本的功能,但我每走一条路都会碰到橡胶墙。 我想要实现的是: 示例bean: 输出: 我认为最简单的方法是扩展BeanSerializer,编写“_type”属性,并委托剩余字段的超类序列化。问题是,方法的可访问性和一些关键方法的“最终”条款使其陷入困境。
问题内容: 我正在阅读“有效Java”中的序列化一章。我试图理解本书中的以下段落。 如果使用可序列化和可扩展的实例字段实现类,则应注意这一点。如果该类具有将其实例字段初始化为其默认值(整数类型为零,布尔值为false,对象引用类型为null)而将被违反的不变量,则必须将此readObjectNoData方法添加到该类: 我不确定上述陈述的含义。 为了测试这一点,我创建了一个Person类(可序列化
在我们的项目(springMVC)Rest API项目中,我希望只对请求和响应使用一个模型(以避免添加大量代码将字段从一个对象复制到另一个对象) 我想用昂首阔步来处理所有的医生,但我遇到了一个小问题。例如,假设我有一个模型用户 和一个简单的控制器 现在,我希望swagger在反序列化时隐藏属性密码,而不是序列化(因此,在输入时显示它,但在输出时显示它),在Id字段中则相反。 我尝试使用@jsoni
问题内容: 我有一个包含a 和a的类。现在,我想使用gson序列化对象,但排除该字段。 如您所见,我已经尝试使用,但是似乎没有任何作用。另外,我已经将该字段设置为私有,因为我认为这会“覆盖” 但运行以下代码: 仍然会导致以下文件内容没有错误: 那我在做什么错?我现在一无所知,并且希望得到任何帮助,因为这似乎行不通。 提前致谢。 问题答案: 为了获得此结果,您需要使用注释所有字段: 并将Gson配置
我试图基于我的对象类POJO创建一个JSON。对于某些字段,我想使用CustomSerializer,因为我想根据我的需求创建字段。因此,我创建了。 将由我的中的两个不同字段调用,我希望根据哪个字段进行调用来处理不同的事情。对于其中一个字段(),我希望使用,而对于其他字段(),我不希望在JSON中使用。 我面临的问题是,当调用时,对于这两个调用,我得到的,由于无法区分哪个字段当前正在调用。 下面的