Java Restlet修改入站对象并返回它还是返回新副本?
我试图从soap-rpc背景了解更多关于restlet的知识。有一件事我似乎不知道该怎么做(也许是不可能的),那就是根据请求修改对象,或者发回经过修改的复制版本 我正在尝试这样做:Java Restlet修改入站对象并返回它还是返回新副本?,java,restlet,Java,Restlet,我试图从soap-rpc背景了解更多关于restlet的知识。有一件事我似乎不知道该怎么做(也许是不可能的),那就是根据请求修改对象,或者发回经过修改的复制版本 我正在尝试这样做: public interface AddressService { @Get Address addOnZipCode( Address address ); } 服务器将与实现一起部署,客户端可以使用动态代理来完成其工作 服务器启动正常,但当客户端进行调用时,服务器上没有指示正在调用实现方法。此外
public interface AddressService {
@Get
Address addOnZipCode( Address address );
}
服务器将与实现一起部署,客户端可以使用动态代理来完成其工作
服务器启动正常,但当客户端进行调用时,服务器上没有指示正在调用实现方法。此外,在对服务器的调用返回之前,客户端不会出错-返回的对象为null
我在这里尝试用RESTlet做的事情可能吗?如果是的话,有没有关于我可能做错了什么的想法
如果需要,我可以发布更多代码
提前谢谢
编辑#1:
我甚至尝试过将其简化为不使用自定义对象:
@Post
String execute( String message );
我得到以下信息:
INFO: Starting the default HTTP client
Exception in thread "main" Method Not Allowed (405) - Method Not Allowed
at org.restlet.resource.ClientResource$1.invoke(ClientResource.java:1615)
at $Proxy5.execute(Unknown Source)
我开始认为这是不可能的,因此,我很难看出这是SOAP+RPC web服务的可行替代方案
编辑#2:
根据《RESTlet在运行》一书中的例子,这似乎是可能的
编辑#3:
事实证明,简单地点击Eclipse控制台中的“停止”按钮并没有关闭服务器实例。打开服务器URL的浏览器会显示一些可疑的结果-有多个旧服务器实例正在运行。把它们都关掉后,我让它开始工作了。最终的答案是使用@Post
而不是@Get1
看看这个:
在服务器端,您的实现必须如下所示:
class AddressServerResource extends ServerResource implements AddressService {
// implementation
}
在客户端:
ClientResource cr = new ClientResource("http://your-api.com/address/123");
AddressService service = cr.wrap(AddressService.class);
// use the service transparently
编辑:
看看这个:
在服务器端,您的实现必须如下所示:
class AddressServerResource extends ServerResource implements AddressService {
// implementation
}
在客户端:
ClientResource cr = new ClientResource("http://your-api.com/address/123");
AddressService service = cr.wrap(AddressService.class);
// use the service transparently
编辑:
这就是我现在正在做的。不幸的是,没有一个示例同时接收和返回一个值。啊,你不能在
Get
方法中传递一个值。文档中没有明确说明这一点,但我在使用Restlet几周后意识到,Get
HTTP方法不允许请求主体。RESTlet使用内容协商将请求体转换为Java对象。您只能在PUT
和POST
方法中传递参数。我现在遇到了一个405错误-您似乎无法使用注释,至少根据这个方法[或者你可以,我不知道怎么做。这就是我现在正在做的。不幸的是,没有一个示例同时接收和返回一个值。啊,你不能在Get
方法中传递一个值。这在文档中没有明确说明,但我在使用Restlet几周后意识到。Get
HTTP方法不允许w表示请求体。请求体是RESTlet使用内容协商将其转换为Java对象的对象。您只能在PUT
和POST
方法中传递参数。我现在遇到了一个405错误-似乎您不能使用注释,至少根据这个方法可以这样做[或者您可以,我不确定如何使用]。