【发布时间】:2019-05-28 10:51:00
【问题描述】:
我想知道是否有某种方法可以过滤资源接收到的对象的属性。
让我解释一下:假设我们有这个对象:
用户DTO
public final class IniciativaDocument {
private String id;
private String name;
private String surname;
private String address;
private Double balance;
}
对于一个资源,我只需要属性“name”和“surname”,但对于其他资源,我只需要“address”和“id”。有什么方法可以让不需要的变量像 Jackson 这样的变量自动为空?
我的目标是,如果客户端发送的请求包含不需要的字段,我不必在将其保存到数据库之前将其设为 null,因为在注册时不应该初始化该字段。
谢谢。
编辑 1
为了更清楚:这是为了安全和方便。
假设我是一名黑客,并且不知何故知道DTO 类具有的字段。我可以轻松地将这样的POST 请求发送到注册用户的服务:
{
"id": "wrong",
"name": "Wrong",
"balance": 20000
}
对于我的服务,我只需要 id 和 name 但黑客也发送了 balance 字段。
我想要做的是,当我收到这个对象时,我可以设置我的端点/api/v1/users(用于注册)将任何不是id 或name 的初始化字段放入null .
您可能会说我可以确保它为 0 或手动将其设置为 null。是的,确实如此,但我想知道是否有一种自动且更舒适的方式来使用注释或类似的东西。
编辑 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();
}
}
【问题讨论】:
标签: java spring spring-boot jersey