Java Springboot: возвращает только некоторые атрибуты объекта - PullRequest
2 голосов
/ 14 января 2020

Предполагая следующий класс:

public class Foo {
  String a, b, c, d;

  // The rest of the class...
}

И контроллер REST API с использованием Springboot:

@GetMapping("/foo")
public Foo myFuntion() {
    return new Foo(...);
}

Запрос /foo возвращает это JSON:

{
 "a": "...",
 "b": "...",
 "c": "...",
 "d": "..."
}

Однако я хотел бы вернуть только некоторые атрибуты класса Foo, например, только атрибуты a и b.

Как я могу это сделать без создания нового класса?

Ответы [ 3 ]

4 голосов
/ 14 января 2020

У вас есть два решения

Используйте @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

}

Подробнее о аннотациях Джексона

1 голос
/ 14 января 2020

@ 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);
}

Теперь все атрибуты помечены для вида имя будет возвращено.

1 голос
/ 14 января 2020

У вас есть много вариантов

  1. Использовать выделенный DTO - отдельный класс, содержащий только необходимые вам реквизиты
  2. Use @ JsonIgnore
  3. Use @ JsonView

... и многие другие. Мне лично очень нравится третий вариант https://www.baeldung.com/jackson-json-view-annotation, но наиболее прямым и независимым от реализации является вариант 1, так что вы также можете go для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...