当前位置: 首页 > 知识库问答 >
问题:

以不同的方式将类序列化为json

公西凯捷
2023-03-14

有没有办法将类序列化为json,但只使用我想在特定情况下使用的字段,而不需要创建类的多个变体?让我们举个例子:

class User{

    @JsonField
    private String name;

    @JsonField
    private String surname;

    @JsonField
    private String hashedCode;

    @JsonField
    private String city;

    @JsonField
    private String anotherDummyString;
}

现在,在我的一个方法中,我希望有一个到json对象的映射,该对象只包含name、city和anotherDummyString。

在第二种方法中,我想有姓氏和城市。在第三种方法中......

有什么愉快而巧妙的方法来实现这一点吗?我想知道我是否可以“隐藏”这些我不需要的字段。

共有2个答案

吴镜
2023-03-14

我希望你在课堂上为你的字段寻找一种过滤器

这可以使用Jackson@JsonFilter实现

package com.concretepage;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonFilter("student")
public class Student 
{
    @JsonProperty("name")
    private String name;

    @JsonProperty("surname")    
    private String surname;

    @JsonProperty("hashedCode") 
    private String hashedCode;

    @JsonProperty("city")   
    private String city;

    @JsonProperty("anotherDummyString") 
    private String anotherDummyString;

}  

在类上面为您创建一个简单的过滤器

SimpleFilterProvider filterProvider = new SimpleFilterProvider();
filterProvider.addFilter("student",
        SimpleBeanPropertyFilter.serializeAllExcept("name", "city","anotherDummyString")); 

将其设置为对象映射器

ObjectMapper mapper = new ObjectMapper();
mapper.setFilterProvider(filterProvider); 

获取json消息

//Pass the student object  
String jsonData = mapper.writerWithDefaultPrettyPrinter()
               .writeValueAsString(student);

您必须能够通过创建一个以上的示例过滤器来获得2个类的方差

纪勇军
2023-03-14

你在找这样的东西吗?(使用javax.json)

JsonObject getJson1() {
    return Json.createObjectBuilder().add("name", this.name).add("city", this.city).build();
}
JsonObject getJson2() {
    return Json.createObjectBuilder().add("surname", this.surname).add("city", this.city).build();
}

只要<代码>。在每个函数调用中添加所需内容。

 类似资料:
  • 我之前的问题没有得到任何结果,可能是我问得不对,或者太详细了。 现在我的基本问题是,如何将一个具有一个类名的JSON对象反序列化为一个具有不同类名的Java对象? 例如,服务器发送/期望的JSON类是“18”(我对此控制为零)。我的Java班不可能是“18”,所以是“_18”。 简单地执行new Gson().fromjson()没有任何帮助,即使使用了不同的命名策略;_18对象始终为NULL。从

  • 我有一个这样的JSON: 所有类型都可以包含可变时间,或者只能有一种类型只有一次。 在SpringBoot应用程序中,我有三个类,扩展了公共类。 我有两种方法来序列化和反序列化它。 虽然测试序列化是可以的,但是反序列化在默认情况下不起作用。所以我修改了<code>CommonObject</code>如下: 现在,反序列化工作正常,但序列化不行。json值中包含属性< code>type两次。 有

  • 问题内容: 在我们的一个项目中,我们使用与MongoDB实例对话的Java Webapp。在数据库中,我们用来跟踪一些对象关系。我们使用jackson(使用mongodb-jackson- mapper)对POJO对象进行反序列化。 但是,我们使用相同的POJO然后将其反序列化到外部世界,在该世界中,我们的前端负责呈现JSON。 现在,我们需要一种外部环境进行序列化的方法,以包含来自的引用对象(以

  • 本文向大家介绍PHP 不同类型的序列化,包括了PHP 不同类型的序列化的使用技巧和注意事项,需要的朋友参考一下 示例 生成值的可存储表示形式。 这对于存储或传递PHP值而不丢失其类型和结构很有用。 要再次将序列化的字符串转换为PHP值,请使用unserialize()。 序列化字符串 序列化双精度 序列化浮点数 浮点数被序列化为双打。 序列化整数 序列化布尔值 序列化null 序列化数组 序列化对

  • 问题内容: 当我向服务(我不拥有)发送请求时,它可能会以请求的JSON数据或看起来像这样的错误进行响应: 在这两种情况下,HTTP响应代码均为200 OK,因此我不能用它来确定是否存在错误-我必须反序列化响应以进行检查。所以我有这样的东西: 在这里,我有一个空的catch子句,该子句可能在标准执行路径中,这是一种难闻的气味……嗯,不仅仅是难闻的气味:它发臭。 您是否知道 “ TryParse” 响

  • 我的Spring Boot API使用camelCase,但我需要通过我的API将一些请求代理到使用snake_case的第三方API。是否可以将Jackson配置为从snake_case反序列化第三方响应,然后将其序列化回camelCase到我的前端? 所需功能的逐步示例: 示例对象: 我调用我的API API调用第三方 第三方返回 我的API将其反序列化为 我的API序列化对象并返回 现在我使