【发布时间】:2020-01-13 18:27:26
【问题描述】:
在 Spring Boot 应用程序中,我有一个名为 Resource.java 的 DTO 类,其中包含一个字符串列表。在 GET REST Web 服务中,当我返回 Resource 对象时,如果列表的大小等于 1,我希望将其直接反序列化为字符串本身,而不是作为具有一个元素的列表。
我已经使用 @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) 处理了这种情况的序列化。
是否有任何类似的反序列化工作?
@Data
public class Resource {
private String id;
private String name;
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
@JsonAlias({"foo", "foos"})
private List<String> foos;
}
当前: { “id”:“22”, “名称”:“汤姆”, “钩子网址”:[ “http:blabla” ] }
要求: { “id”:“22”, “名称”:“汤姆”, “hookUrls”:“http:blabla” }
【问题讨论】:
-
请问您为什么要实现这个目标?看到这样的 API 非常不寻常/令人惊讶。如果某些东西可能包含多个值,老实说,它应该始终是一个列表。您甚至必须启用特定的映射功能来支持这一点
-
已有一个 API 使用带有字符串 foo 的资源,而不是我示例中的列表。但是我需要为一些想要在其中附加多个 foo 值的新客户端调整这个 API,但同时我也需要为旧客户端的请求保持不变。如果解决方案过于复杂,我将创建一个具有列表 foos 的单独资源 DTO,并将在新客户端的新 v2 API 中使用。
-
This 序列化功能应该适合你
标签: java json spring-boot serialization