【发布时间】:2013-05-06 21:42:47
【问题描述】:
我们使用Spring来实现REST控制器,例如:
@Controller
@RequestMapping("/myservice")
public class MyController {
@RequestMapping(value = "foo", method = RequestMethod.GET)
public @ResponseBody string foo() {...}
}
我可以使用 spring RestTemplate 调用此服务,它工作正常,但我更喜欢使用代理调用它,而不是使用字符串 url 进行无类型调用:
// client code:
MyController proxy = getProxy("baseUrl", MyController.class);
String results = proxy.foo();
因此,代理生成的输入是带有描述 REST 详细信息的注释的 java 接口。
我阅读了this article,看起来所有类型的远程调用都有代理,而我需要的 REST 就是RestProxyFactoryBean,它将采用我的 REST java 接口并返回使用 RestTemplate 作为实现的类型安全代理。
我找到的最接近的解决方案是JBoss RESTEasy。
但它似乎使用了不同的注释集,所以我不确定它是否适用于我已经拥有的注释:@Controller、@RequestMapping。
是否有其他选择,或者 RESTEasy 是唯一的选择?
请注意,我是春季新手,所以一些明显的春季事物对我来说很新。
谢谢。
迪玛
【问题讨论】:
-
你找到解决办法了吗?
-
就个人而言,我发现 Spring MVC 测试框架是正确的工具。以 RESTful 方式进行测试可以消除很多意外。见docs.spring.io/spring-framework/docs/current/…
-
代理到底应该做什么?如果您正在寻找 REST 协议的另一种实现,还有 cxf 项目。
-
我最终编写了自己的代码生成器:rest api 编写为带有注释的 java 接口,代理生成器反映它并生成实现该接口的客户端代理类。像往常一样,必须编写服务器端实现。
-
这其实是一件很有趣的事情。从我的角度来看,拥有代理很重要,以确保 URL 和参数名称不是硬编码的。所以版本升级不需要查找和替换。代理可能会固执己见并自行使用
RestTemplate,但这不是重点
标签: spring rest resteasy resttemplate