簡體   English   中英

使用POST與@FormParam(帶有Jersey REST的Java Web服務),遇到405“方法不允許”錯誤

[英]Getting 405 “Method Not Allowed” error using POST with @FormParam (Java web service with Jersey REST)

我知道將某些內容傳遞給既不是String也不是簡單Type的REST Server(資源)並不容易。
但是對於一個簡單的訂購過程,我需要從客戶端向服務器發送商品列表(應訂購)。

我已經嘗試過使用“ QueryParam”,將我的對象(將列表包裝到DTO中)轉換為JSON-String並將其傳遞。 沒用 (但是對於不需要將對象傳遞到服務器的其他方法,我的服務即使是POST方法也可以正常工作。)

然后,我發現了@FormParam,它在理論上可以傳輸每種對象。 (這就是我讀到的,實際上是真的嗎?)

因此,我嘗試使用一種非常簡單的測試方法將字符串列表傳遞給服務,服務器端應返回該列表的元素數量。

那是我的代碼:

在服務器端(資源)上:

@Path("bestellung")
public class BestellungResource {

  @Path("test")
  @POST
  @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  @Produces(XML)

  public Integer test(
    @FormParam("list") List<String> list){

      return list.size();        
  }
}


在客戶端(在會話Bean中):

public Integer  test() {

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    list.add("3");

    Form form = new Form();
    form.add("list", list);

    return service
             .path("bestellung")
             .path("test")
             .type(MediaType.APPLICATION_FORM_URLENCODED)
             .post(Integer.class, form);
}

這樣構建服務的地方:

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
service = client.resource(UriBuilder.fromUri("<service url>").build());

從我的GUI或直接通過EJB Explorer調用此客戶端方法總是會出現405錯誤。

哪里出問題了? 我是否錯過了POST,MIME類型或表單?

順便說一句,即使使用簡單的表單參數(例如String或int),它也不起作用,並且還會引發405錯誤。

謝謝你的幫助!
亞娜

好的。

由於我發現了405錯誤的原因,因此我將關閉此問題。 但是,我將為新發現的誤讀400錯誤打開一個新的錯誤。 我在上面的評論中解釋了“解決方案”:

我將服務從較舊的服務器(POST根本不起作用,並且始終拋出405)移到了較新的服務器,並且沒有在客戶端中更改服務URL! @ _ @(因此新客戶端仍嘗試訪問舊服務器)

但是現在,我可以發送字符串列表,但是不能發送自己的類對象(實體或DTO)。 現在,我收到一個HTTP 400錯誤“錯誤請求” :-(但是,我沒有做任何其他更改。是否可以發送非標准類型?

(->我將在一個新問題中提出。)

對不起,這個愚蠢的錯誤。
亞娜

暫無
暫無

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

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