gpt4 book ai didi

java - Spring boot with Jersey - 过滤请求主体属性

转载 作者:行者123 更新时间:2023-12-02 05:07:52 26 4
gpt4 key购买 nike

我想知道是否有某种方法可以过滤资源接收的对象的属性。

让我解释一下自己:假设我们有这个对象:

用户DTO

public final class IniciativaDocument {
private String id;
private String name;
private String surname;
private String address;
private Double balance;
}

对于资源,我只需要属性“名称”和“姓氏”,但对于其他资源,我只需要“地址”和“id”。有什么方法可以使用 Jackson 之类的方法自动将不需要的变量设为 null 吗?

我的目标是,如果客户端发送的请求包含不需要的字段,我不必在将其保存到数据库之前将其设置为空,因为在注册时不应初始化该字段.

谢谢。

编辑 1

更清楚地说:这是为了安全性和简便性。

假设我是一名黑客,并且以某种方式知道 DTO 类具有的字段。我可以轻松地将这样的 POST 请求发送到注册用户的服务:

{
"id": "wrong",
"name": "Wrong",
"balance": 20000
}

对于我的服务,我只需要 idname,但黑客也会发送一个 balance 字段。

我想做的是,当我收到这个对象时,我可以设置我的端点 /api/v1/users (用于注册)以放置任何不是 idnamenull

您可能会说我可以确保它为 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();
}
}

最佳答案

您可以使用Jackson 的 JsonIgnore 属性来实现此目的,例如:

@JsonInclude(Include.NON_NULL)
public final class IniciativaDocument {
private String id;
private String name;
private String surname;
private String address;
}

所以基本上它的作用是,当它将此类映射到 Json 时,它将忽略所有具有 null 值的字段。如果您不希望它应用于整个类,您也可以在字段上执行此操作。

如果您想通过前端实现它,那么您可以使用这个很棒的API GraphQL ,所以基本上在请求中您将指定您需要的字段,并且它将仅返回这些字段。

关于java - Spring boot with Jersey - 过滤请求主体属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com