gpt4 book ai didi

java - 使用 Restcontroller 将空值转换为空字符串

转载 作者:行者123 更新时间:2023-11-29 05:06:59 28 4
gpt4 key购买 nike

我在 Spring 中使用 @RestController,我有以下响应:

{"name":"Khan","first":null,"last":null}

我希望 null 为 ""(空字符串)

我不想做一些丑陋的事情,比如用空字符串初始化每个属性:

@Transient private String first="";
@Transient private String last="";

我找到了一个讨论 how to implement this solution "for Jackson < 2.0)" 的链接,但我正在使用 Jackson 库 > 2.0,例如:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>

此外,根据其他一些尝试过的解决方案,链接中的解决方案并不总是有效。

是否有一种优雅的方法可以将具有空值的字段转换为空字符串?最好有注释。

最佳答案

我之前的回答是 Not Acceptable ,因为它不包括注释和序列化程序。所以引用this链接(我通过搜索“jackson 2.0 custom serializer”在 google 上找到了它),我想这应该可以工作(假设你的类是 Person 因为它没有指定):

public class PersonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("name", value.name);
if (value.first == null) {
jgen.writeStringField("first", "");
}else{
jgen.writeStringField("first", value.first);
}
if(value.last == null){
jgen.writeStringField("last", "");
}else{
jgen.writeStringField("last", value.last);
}
jgen.writeEndObject();
}
}

然后在你的 person 类上

@JsonSerialize(using = PersonSerializer.class)
public class Person {
//First/Last name etc
}

我认为您应该重新评估为什么要为此使用自定义解析器,如果您继续阅读此答案顶部的整个链接,您将看到自定义解析器的用例以及它与您的解析器有何不同。在他的例子中,他想返回一些与该字段没有直接关系的数据,而您只想将 null 视为空字符串。

关于java - 使用 Restcontroller 将空值转换为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30086263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com