Хотелось бы узнать, есть ли способ отфильтровать свойства объекта, который получает ресурс.
Позвольте мне объяснить: скажем, у нас есть этот объект:
UserDTO
public final class IniciativaDocument {
private String id;
private String name;
private String surname;
private String address;
private Double balance;
}
А для ресурса мне нужны только свойства "name" и "фамилия", а для других мне нужны только "address" и "id". Есть ли способ автоматически обнулить ненужные переменные чем-то вроде Джексона?
Моя цель для этого состоит в том, чтобы, если клиент отправлял запрос с полем, которое не нужно, мне не приходилось обнулять его перед сохранением в базе данных, поскольку это поле не должно инициализироваться при регистрации.
Спасибо.
РЕДАКТИРОВАТЬ 1
Для большей ясности: это из соображений безопасности и простоты.
Представьте, что я хакер и каким-то образом знаю поля, которые есть у DTO
класса. Я мог бы легко отправить запрос POST
, подобный этому, в службу регистрации пользователей:
{
"id": "wrong",
"name": "Wrong",
"balance": 20000
}
Для моего обслуживания мне понадобятся только id
и name
, но хакер также отправляет поле balance
.
Что я хочу сделать, так это то, что при получении этого объекта я могу установить свою конечную точку /api/v1/users
(которая должна регистрироваться), чтобы поместить любое инициализированное поле, которое не является id
или name
в null
.
Вы могли бы сказать, что я могу просто убедиться, что это 0 или установить его на ноль вручную. Да, это правда, но я хочу выяснить, есть ли автоматический и более удобный способ сделать это с аннотациями или чем-то подобным.
РЕДАКТИРОВАТЬ 2
Пример ресурса:
@Component
@Path("iniciativas")
@Produces(MediaType.APPLICATION_JSON)
public final class IniciativasEndpoint {
@POST
public Response crearIniciativa(@Valid @NotNull(message = CONSTRAINT_BODY_NOT_NULL) @ConvertGroup(to = IniciativasGroup.Create.class)
final IniciativaDTO iniciativaDTO,
@Context UriInfo uriInfo) {
return Response.ok().build();
}
}