相关疑难解决方法(0)

如果值为null,如何告诉Jackson在序列化期间忽略某个字段?

如果该字段的值为null,Jackson如何配置为在序列化期间忽略字段值.

例如:

public class SomeClass {
   // what jackson annotation causes jackson to skip over this value if it is null but will 
   // serialize it otherwise 
   private String someValue; 
}
Run Code Online (Sandbox Code Playgroud)

java jackson

658
推荐指数
11
解决办法
55万
查看次数

Gson序列化字段仅在不为空或不为空时

我有需要将java对象转换为json的地方.

我正在使用Gson,但我需要转换器只序列化非null或非空值.

例如:

//my java object looks like
class TestObject{
    String test1;
    String test2;
    OtherObject otherObject = new OtherObject();
}
Run Code Online (Sandbox Code Playgroud)

现在我的Gson实例将此对象转换为json看起来像

Gson gson = new Gson();
TestObject obj = new TestObject();
obj.test1 = "test1";
obj.test2 = "";

String jsonStr = gson.toJson(obj);
println jsonStr;
Run Code Online (Sandbox Code Playgroud)

在上面的印刷品中,结果是

{"test1":"test1", "test2":"", "otherObject":{}}
Run Code Online (Sandbox Code Playgroud)

在这里,我只想要结果

{"test1":"test1"}
Run Code Online (Sandbox Code Playgroud)

由于test2为空且otherObject为空,我不希望它们被序列化为json数据.

顺便说一句,我正在使用Groovy/Grails,所以如果有任何插件,这将是好的,如果没有任何建议自定义gson序列化类将是好的.

java groovy serialization json gson

28
推荐指数
2
解决办法
3万
查看次数

如何告诉杰克逊在反序列化期间忽略空对象?

在反序列化过程中(据我所知是将JSON数据转换为Java对象的过程),如何告诉Jackson当它读取不包含数据的对象时,应该忽略它?

我正在使用Jackson 2.6.6和Spring 4.2.6

我的控制器收到的JSON数据如下:

{
    "id": 2,
    "description": "A description",
    "containedObject": {}
}
Run Code Online (Sandbox Code Playgroud)

问题是对象"containedObject"被解释为is并且它正被实例化.因此,只要我的控制器读取此JSON数据,它就会生成ContainedObject对象类型的实例,但我需要将其替换为null.

最简单,最快速的解决方案是,在收到的JSON数据中,此值为null,如下所示:

 {
        "id": 2,
        "description": "A description",
        "containedObject": null
    }
Run Code Online (Sandbox Code Playgroud)

但这是不可能的,因为我无法控制发送给我的JSON数据.

是否有一个注释(如此处所解释的)适用于反序列化过程,可能对我的情况有所帮助?

我留下了我的课程表示以获取更多信息:

我的实体类如下:

public class Entity {
    private long id;
    private String description;
    private ContainedObject containedObject;

//Contructor, getters and setters omitted

}
Run Code Online (Sandbox Code Playgroud)

我的包含对象类如下:

public class ContainedObject {
    private long contObjId;
    private String aString;

//Contructor, getters and setters omitted

}
Run Code Online (Sandbox Code Playgroud)

java spring json jackson

6
推荐指数
1
解决办法
1万
查看次数

从 json 响应中排除空对象、空数组和空对象数组

目标

如何从Jackson 在 a 中生成的 JSON 响应中排除所有空 json 对象{}、数组[]或空对象数组?[{},{}]RestController

要求和背景

我正在为客户端构建 Spring Boot REST API。API 向数据库发送请求,并且必须生成 JSON 响应。

限制条件:

  • DAO 层发送本机 SQL 查询并以列表形式接收巨大的数据库结果。开发人员必须使用索引手动将此结果映射到 Java 对象(参见下面的代码)
  • SQL 查询返回大量空值(这些查询无法修改)。由于这些空值,仅具有空值字段的 Java 对象经常被实例化

要求:

  • 所有具有空值的字段都必须从 JSON 响应中排除。已经使用 Jackson@JsonInclude(JsonInclude.Include.NON_NULL)注释实现
  • 所有空 json 对象{}或数组[],或空对象数组[{},{}]必须从 JSON 响应中排除。这就是我陷入困境的地方(请参阅下面的示例)

代码

DAO层手动映射:

public List<A> daoMethod() {
    List<Object[]> dbResult = getDbResults();
    List<A> javaObjects = new ArrayList<>();

    // build nested Java objects
    for (Object[] line in dbResult) {
        A …
Run Code Online (Sandbox Code Playgroud)

java jackson spring-boot

5
推荐指数
1
解决办法
3828
查看次数

在序列化期间忽略空集合

我已经读过像@JsonInclude这样的问题来忽略空值.这适用于实体内的常规字段,但不适用于集合.如果实体中存在空集合,则Json序列化将提供空值.

如何对集合进行等效忽略?

java serialization spring json jackson

2
推荐指数
1
解决办法
668
查看次数

标签 统计

java ×5

jackson ×4

json ×3

serialization ×2

spring ×2

groovy ×1

gson ×1

spring-boot ×1