簡體   English   中英

帶Jersey的Spring啟動 - 過濾請求主體屬性

[英]Spring boot with Jersey - Filter request body properties

我想知道是否有某種方法來過濾資源接收的對象的屬性。

讓我解釋一下:讓我們說我們有這個對象:

UserDTO

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
}

對於我的服務,我只需要idname但黑客也在發送一個balance字段。

我想要做的是,當我收到這個對象時,我可以設置我的endpoint /api/v1/users (這是注冊)將任何非idname初始化字段設置為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();
    }
}

您可以使用Jackson's JsonIgnore Property ,如下所示:

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

所以基本上它的作用是,當它將這個類映射到Json ,它將忽略具有null值的所有字段。 如果你想要它不適用於全班,你也可以在田野上做。

如果你想通過front-end實現它,那么你可以使用這個偉大的api GraphQL ,所以基本上在請求中你將指定你需要的字段,它將只返回那些字段。

使用匹配后過濾器:您可以實現ContainerRequestFilter並使用@PostMaching (javax.ws.rs.container.PreMatching)注釋您的過濾器,並使用其數據操作您的請求。

為您的過濾器定義一個@interface:

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface AnnotationForYourFilter {}

使用@AnnotationForYourFilter注釋所需的子資源,您就完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM