首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止使用eclipse Yasson输出空字符串和空集合

如何防止使用eclipse Yasson输出空字符串和空集合
EN

Stack Overflow用户
提问于 2019-08-29 20:19:34
回答 1查看 241关注 0票数 2

我们希望为某些Java对象创建一个json字符串,但不希望将空字符串或空数组添加到json输出中。我们使用Eclipse Yasson 1.0.1来创建json字符串。

实际上我们想要的是杰克逊的JsonInclude.Include.NON_EMPTY的行为,但我们不能使用杰克逊。

代码语言:javascript
复制
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {

    private int id;

    private String name;

    private String email;

    private String birthPlace;

    private List<String> phones;
}

public class Test {
    public static void main(String[] args) {
        Jsonb jsonb = JsonbBuilder.create();

        Person person = Person.builder()
                .id(1)
                .name("Gert")
                .email("") //Should not be in output -> nok
                .birthPlace(null) //Should not be in output -> ok
                .phones(new ArrayList<>()) //Should not be in output -> nok
                .build();

        String toJsonString = jsonb.toJson(person);

        System.out.println(toJsonString);
    }
}

当前输出为

代码语言:javascript
复制
{"email":"","id":1,"name":"Gert","phones":[]}

但我们希望它是

代码语言:javascript
复制
{"id":1,"name":"Gert"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 23:30:54

我查看了文档和代码,Yasson只提供了一个忽略空值的选项(默认情况下是激活的)。

代码语言:javascript
复制
JsonbConfig config = new JsonbConfig().withNullValues(false);
Jsonb jsonb = JsonbBuilder.create(config);

唯一的选择似乎是为您的Person类实现一个自定义的JsonbSerializer,并且当值为空时不序列化该字段。

代码语言:javascript
复制
public class PersonSerializer implements JsonbSerializer<Person> {
    @Override
    public void serialize(Person person, JsonGenerator generator, SerializationContext serializationContext) {
        generator.writeStartObject();
        generator.write("id", person.getId());
        if (person.getName() != null && !person.getName().isEmpty()) {
            generator.write("name", person.getName());
        }
        if (person.getEmail() != null && !person.getEmail().isEmpty()) {
            generator.write("email", person.getEmail());
        }
        // ...
        generator.writeEnd();
    }
}

并使用以下代码初始化Yasson

代码语言:javascript
复制
JsonbConfig config = new JsonbConfig().withSerializers(new PersonSerializer());
Jsonb jsonb = JsonbBuilder.create(config);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57710065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档