![](/img/trans.png)
[英]Java SpringBoot OpenApi @ApiResponse shows wrong return object
[英]Java Springboot: Return only some attributs of an object
假設有以下類:
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
。
如果不創建新類,我怎么能做到這一點?
你有兩個解決方案
在要排除的屬性上使用 @JsonIgnore
例如,您想從序列化中排除a 。(只想得到b,c,d )
public class TestDto {
@JsonIgnore
String a;
String b;
String c;
String d;
//Getter and Setter
}
使用 @JsonInclude 和 @JsonIgnoreProperties
通過此解決方案,如果 a、b、c、d 中的每一個都為空,則它將從響應中排除。
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TestDto {
String a;
String b;
String c;
String d;
//getters and setter
}
你有很多選擇
......還有更多。 我個人對第三個選項https://www.baeldung.com/jackson-json-view-annotation非常滿意 - 但最直接且獨立於實現的是選項 1 - 所以你也可以選擇它。
@JsonView 將是以受控方式處理所有屬性的最佳選擇。
定義視圖
public class Views {
public static class Public {
}
public static class private {
}
}
地圖屬性
@JsonView(Views.Public.class)
public String a;
並標記返回視圖
@JsonView(Views.Public.class)
@RequestMapping("/items/{id}")
public Item getItemPublic(@PathVariable int id) {
return ItemManager.getById(id);
}
現在將返回所有標有視圖名稱的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.