簡體   English   中英

使用自定義對象而不是@FormParam作為JAX-RS資源輸入

[英]Using a custom object instead of @FormParam as JAX-RS resource input

我有一個示例代碼:

@PUT
public String method(@FormParam("firstName") String firstName, 
                     @FormParam("lastName") String lastName ) {
    Person person = new Person(firstName, lastName);
    // ...
}

我想停止使用@FormParams並使用Person代替:

@PUT
public String method(@Person person) {
    // ...
}

最好的方法是什么?

我正在嘗試使用自定義BodyReader,但我必須在readFrom方法中“手動”解析InputStream。

這是正確的方法嗎?如果是,將InputStream轉換為KEY => VALUE HashMap的最佳方法是什么?

您有兩種選擇:

  1. 可能您只在該方法中傳輸單個實體實例,在這種情況下,您可以簡單地避免使用任何JAX-RS注釋來注釋person參數。 在JAX-RS規范中,這稱為實體參數,REST方法中必須有一個這樣的參數,然后由注冊的實體提供者自動解碼。
  2. 更改Person類,使其構造函數接收單個String作為參數,並接收構造函數中的解碼。 這里提取:

    通常,方法參數的Java類型可以:

    • 是一種原始的類型; - 有一個接受單個String參數的構造函數;

    • 有一個名為valueOf或fromString的靜態方法接受單個String參數(例如,參見Integer.valueOf(String)和java.util.UUID.fromString(String));

    • 有一個javax.ws.rs.ext.ParamConverterProvider JAX-RS擴展SPI的注冊實現,它返回一個能夠為該類型進行“from string”轉換的javax.ws.rs.ext.ParamConverter實例。 要么

    • Be List,Set或SortedSet,其中T滿足上面的2或3。 生成的集合是只讀的。

暫無
暫無

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

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