Java Json выгрузка разных полей

111
15 марта 2021, 17:10

Есть объект с несколькими полями который отправляется как Json запрос на сервер.

Допустим есть два разных Json запроса на сервер: 1 добавление данных, 2 обновление данных.

Как сделать так, чтоб при разных Json запросах отправлялись разные поля одного объекта?

Например:

  • при добавлении отправлять только поле name
  • при обновлении отправлять поля yandexId и name

    public class CampaignDataTest implements Serializable {
        private long id;
        private long yandexId;
        private String name;
       //Гетеры и сеттеры
    }
    
Answer 1

Если пользуешься Jackson

Заводим класс с интерфейсами. Ими мы будем помечать поля. Если один интерфейс расширяет другой, он включит в Json все поля помеченные предком.

public final class Views {
    public interface Name {}
    public interface IdName extends Name{}
    public interface FullUserInfo extends IdName {} 
}

Потом в классе помечаем поля @JsonView

   @JsonView(Views.FullUserInfo.class)  
   private long id;
   @JsonView(Views.IdName.class)
   private long yandexId;
   @JsonView(Views.Name.class)
   private String name;

В контроллере помечаем методы аннотациями

@RestController
@RequestMapping("user")
public class UserController {
   @PutMapping("/")
   @JsonView(Views.Name.class)
   public User addUser() {...}
   @PatchMapping("/")
   @JsonView(Views.IdName.class)
   public User updateUser() {...}
}

Теперь после запроса с фронтенда по одному адресу (н.р http://localhost:8080/user/) но разными методами (Put и Patch) будут вызываться разные методы контроллера. А в ответ будут уходить json с полями помеченными нужным интерфейсом. Т.е метод addUser() вернет json вида {"name":"someName"}, а updateUser() {"name":"someName","yandexId":"1234567890"}

READ ALSO
можно ли проверить тип параметра generic

можно ли проверить тип параметра generic

Можно ли проверить непосредственно тип самого параметра в классе generic? типа этого?

111
Как перенести приложение с spring data на hibernate?

Как перенести приложение с spring data на hibernate?

я столкнулся с проблемой переноса приложения с одной технологии на другую, если верить тому, что я вычитал

91
как из метода subscribe вернуть observable значение в rxjava2?

как из метода subscribe вернуть observable значение в rxjava2?

Идея такова: Вставляю список в БД, подписываюсь на вставку, при успешной вставке, возвращается список id вставленных элементов, по этому списку...

101