Игнорировать поля сущностей в аргументах REST при загрузке Spring

#java #spring #spring-boot

#java #spring #весенняя загрузка

Вопрос:

У меня есть объект, управляемый в базе данных, и контроллер, который предлагает некоторые операции CRUD с этим объектом.

Некоторые поля в Сущности не должны быть изменены интерфейсом, который использует REST API. Я просто хочу игнорировать значения этих неизменяемых полей и вместо этого использовать значения из базы данных.

До сих пор я делал это в методе моего контроллера, который был вызван до того, как я выполнил дальнейшую работу с сущностью. Но этот подход кажется мне плохим, поэтому я искал другие решения.

Что я могу сделать, чтобы перенести эту предварительную обработку из моего контроллера?

Ответ №1:

Вот решение, о котором я могу думать в своей голове:

Вы можете создать класс модели представления, подобный MyObjVm , который содержит подмножество полей вашего MyObj класса сущностей, которые можно изменять. В вашем контроллере вы можете использовать MyObjVm объект следующим образом:

 @RequestMapping(//...)
public String method(Model model, @RequestBody MyObjVm myObjVm) {
// ... 
// populate the MyObj entity from myObjVm so that only the changeable fields are consumed and assigned.
}  
  

Выше показано, как вы используете JSON из интерфейса.

Если вы хотите сделать обратное, просто верните MyObjVm , поля которого будут заполнены MyObj изменяемыми полями. Ваш интерфейс должен будет иметь соответствующий объект JS, чтобы использовать возвращенный JSON.

Что я могу сделать, чтобы перенести эту предварительную обработку из моего контроллера?

Таким образом, обработка, которая должна быть получена из вашего контроллера, в значительной степени представляет собой преобразование между вашей моделью представления и сущностью. Вы можете создать метод вспомогательного класса, предназначенный для этого.

Комментарии:

1. Он / она может делать это без использования dto (свободно используемого здесь) или модели представления. То, что он делает, несомненно, выполняет свою работу, но код не такой чистый. Использование модели представления должно привести к достижению цели, которая заключается в игнорировании неизменяемых свойств.

2. Я написал dto без полей, которые я не хочу изменять. Таким образом, Джексон просто игнорирует нежелательную информацию из JSON, и я выполняю преобразование в дополнительном вспомогательном классе.