REST API в Java — как поддержать PATCH с помощью Hibernate ValidatorJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 REST API в Java — как поддержать PATCH с помощью Hibernate Validator

Сообщение Anonymous »

При написании REST-API на Java метод PATCH запрашивает применение «набора изменений», описанного в объекте запроса, к ресурсу, указанному Request-URI. (см.: https://datatracker.ietf.org/doc/html/rfc5789)
Учитывая следующий ресурс:

Код: Выделить всё

{
productId: 7,
name: "container",
contactPerson: "peter",
price: 12
}
С помощью PATCH я смогу установить для поля «contactPerson» значение NULL, не затрагивая при этом другие поля, например:

Код: Выделить всё

{
productId: 7,
contactPerson: null
}
Как я могу реализовать это в экосистеме Java, учитывая, что наиболее важные библиотеки здесь должны иметь полную поддержку:
  • Джексон (десериализация JSON)
  • Валидатор Hibernate (проверка компонентов)
  • Микропрофиль OpenAPI (определение API)
Необязательная Java
Среди прочего я опробовал необязательную Java, и хотя изначально она была похоже, это сработало, это неправильный инструмент для этого, поскольку необязательный параметр не должен содержать значение NULL, но также должна быть возможность явно установить значение NULL в PATCH (вместо того, чтобы опускать его).
  • но я продвинулся очень далеко с использованием необязательного. Единственная проблема заключалась в том, что Hibernate Validator не поддерживал его так, как мне было нужно.
Например, поначалу следующее выглядело хорошо (здесь для имени -поле, которое является обязательным = false и имеет значение null = false):

Код: Выделить всё

@Schema(required = false, nullable = false)
Optional name = Optional.empty();
Валидатор Hibernate посчитал аннотацию @NotNull нарушенной, когда в запросе отсутствовало поле имени, что мне показалось странным, поскольку аннотация находится внутри необязательного-общего-объявления (а не непосредственно в нем). Необязательно)
JsonNullable
Джексон предоставляет аннотацию JsonNullable. Хотя это подходящий инструмент для этой задачи и, по-видимому, он поддерживается для openapi, он, похоже, не поддерживается для валидатора спящего режима, по крайней мере, я не смог ничего о нем найти.
Проверка
В основном проблема возникает во время проверки аннотаций проверки компонентов, которые важны для API.
  • При использовании таких аннотаций, как @Size(255), @Email и т. д., существует требование, чтобы...

    ...эти проверки должны проверяться валидатором Hibernate, когда поле задано/установлено в PATCH
  • ...эти проверки не должны проверяться, если поле опущено (отсутствует ) в ПАТЧЕ.

--
Охватывается ли REST-PATCH этими основными библиотеками экосистемы Java, и если да, то каков рекомендуемый способ его поддержки?>

Подробнее здесь: https://stackoverflow.com/questions/790 ... -validator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»