簡體   English   中英

Java Springboot:僅返回對象的某些屬性

[英]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類的一些屬性,例如,只有屬性ab

如果不創建新類,我怎么能做到這一點?

你有兩個解決方案

在要排除的屬性上使用 @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

}

有關 Jackson 注釋的更多信息

你有很多選擇

  1. 使用專用的 DTO - 單獨的類,只包含你需要的道具
  2. 使用@JsonIgnore
  3. 使用@JsonView

......還有更多。 我個人對第三個選項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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM