【发布时间】:2020-01-14 12:18:18
【问题描述】:
假设以下类:
public class Foo {
String a, b, c, d;
// The rest of the class...
}
还有一个使用 Springboot 的 REST API 控制器:
@GetMapping("/foo")
public Foo myFuntion() {
return new Foo(...);
}
请求/foo 返回此 JSON:
{
"a": "...",
"b": "...",
"c": "...",
"d": "..."
}
但是,我想只返回Foo 类的一些属性,例如,只返回属性a 和b。
如果不创建新类,我怎么能做到这一点?
【问题讨论】:
-
解决这个问题的惯用方法是创建 DTO(数据传输对象)。 Java 不太喜欢“有时是这些值,有时不是”,因为它会导致 API 不一致并破坏强类型。
-
@Christopher 如果我总是只想返回 a 和 b,那会改变吗?
-
在您现有的 DTO 类中,使用“@JsonInclude(JsonInclude.Include.NON_EMPTY)”注释该类,然后在返回之前将 foo 的属性设置为 null。
-
您可以查看 GraphQL,您可以在其中定义应该返回的确切内容。
-
如果您不想返回给定的属性,请使用
@JsonIgnore。如果您需要在不同的地方返回不同的属性集,请使用DTOs。
标签: java rest spring-boot