我知道向 REST 服务器(资源)传递既不是字符串也不是简单类型的东西并不容易。
但是对于一个简单的订购过程,我需要从客户端向服务器发送一个文章列表(应订购)。
我已经尝试使用“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 错误。
谢谢你的帮助!
亚娜