ele*_*ype 8 java jax-rs resteasy
我们使用Resteasy并且在如何调用某些@GET方法时遇到问题.
如果方法的接口只有简单的参数,则没有问题.例如:
@GET
@Path("/test/{myparam}")
public FacetQueryResultImpl testMethod(@PathParam("myparam")String myparam);
Run Code Online (Sandbox Code Playgroud)
但是如果我们尝试使用POJO作为参数,似乎RestEasy无法将其序列化为查询字符串参数.例如:
@GET
@Path("/testGet")
public FacetQueryResultImpl testMethod(ParamPojo myparam);
Run Code Online (Sandbox Code Playgroud)
要么
@GET
@Path("/testGet")
public FacetQueryResultImpl testMethod(@QueryParam("myparam")ParamPojo myparam);
Run Code Online (Sandbox Code Playgroud)
(用,ParamPojo.java :)
public class ParamPojo
{
private String name;
private String description;
(...)
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试这个时,有时候找不到服务,有时候我们会得到"A GET请求不能有一个身体".例外.
使用@POST我们可以使用POJO具有参数,但是我们的一些方法不会修改服务器上的任何内容,因此应该使用@GET.
解决方法是"爆炸"ParamPojo,并将其所有属性用作方法的分离参数.但这消除了"RestEasy"中的"Easy"部分,不是吗?
eid*_*den 13
您必须@org.jboss.resteasy.annotations.Form
在方法参数上使用注释.
http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html_single/#_Form
例:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import junit.framework.Assert;
import org.jboss.resteasy.annotations.Form;
import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Test;
public class TestCase {
@Path("/")
public static class Service {
@Path("")
@GET
public String get(@Form ValueObject vo){
return vo.getParam();
}
}
public static class ValueObject {
@QueryParam("myparam")
private String param;
public String getParam() {
return param;
}
}
@Test
public void test() throws Exception {
Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
dispatcher.getRegistry().addSingletonResource(new Service());
MockHttpRequest request = MockHttpRequest.get("/?myparam=somevalue");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
Assert.assertEquals("somevalue", response.getContentAsString());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5408 次 |
最近记录: |