Один POJO для различных операций REST с проверкой - PullRequest
0 голосов
/ 30 января 2019

Я проектирую службу REST и сталкиваюсь с проблемой, что для данного объекта у меня есть несколько "состояний".

  • Объект, как он прибывает в начальной операции POST.
  • Объект, который я храню в нашей БД
  • Объект, который я возвращаю по GET
  • Объект, который я ожидаю в патче

например

class MyObject {

// Unwanted on POST
// Required on PATCH
// Included on GET
@JsonProperty("id")
private UUID id;

// Everywhere
@NonNull
@JsonProperty("name")
private String name;

// Field I need for internal processing but don't want included in REST.
private AuditTrail stuff;

@JsonCreator
@Builder
public MyObject(...) { ... }
}


...


@Get
public ResponseEntity myFunction(HttpServletRequest request,
                                 @RequestBody @Valid MyObject requestBody) {
...
}

Проблема, с которой я сталкиваюсь, заключается в том, что на POST, когда идентификатор не указан, десериализация завершается неудачно.Я обошел это с помощью @JsonIgnoreProperties (), но теперь в PATCH, где мне нужен идентификатор, все работает, если оно опущено.

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

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

1 Ответ

0 голосов
/ 30 января 2019

Если вы планируете службу покоя, тогда вам все равно не нужен идентификатор в теле.Идентификатор будет получен из URL как переменная пути:

POST myobjects

GET myobjects/{id}

PATCH myobjects/{id}

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