繁体   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