我正在构建一个使用外部 REST 服务(来自服务器端)的中间件服务。我目前正在使用 Spring boot 和 RestTemplate 来进行远程调用。
Map<String, String> urlVariables = new HashMap<>();
urlVariables.put("address", IP);
urlVariables.put("port", PORT);
urlVariables.put("par1", parameter1);
urlVariables.put("par2", parameter2);
MyServiceResponse state =
restTemplate.getForObject("http://{address}:{port}/service/{par1}/{par2}", MyServiceResponse.class, urlVariables);
我想知道是否有任何库可以提供注释来自动生成 REST 客户端,就像 Android 中的 Volley 那样。
@GET(url="http://{address}:{port}/service/{par1}/{par2}")
public MyServiceResponse getCurrentState(String address, String port, String par1, String par2)
Resteasy 有一个客户端代理框架,允许您使用 JAX-RS 在远程 HTTP 资源上调用的注释。它的工作原理是 您编写 Java 接口并在方法上使用 JAX-RS 注释 和界面。
你在寻找这样的东西吗?:
@POST
@Path("/login/auth")
public Response loginWithAuth(
@FormParam("username") String username,
@FormParam("token") String token
) {
try {
Validations.checkNotEmpty(username, "Missing username parameter");
Validations.checkNotEmpty(token, "Missing MyRaiTV token parameter");
} catch (Exception ex) {
return error(ex.getMessage());
}
您可以使用REST Gap来实现此目的。您只需:
这就是代码中的样子(对于 Spring-MVC 接口 IPetStoreService):
// Create client
IPetStoreService client = RESTTemplateSpringMVCFactory
.create(restTemplate, "http://mypetstore.com/rest", IPetStoreService.class);
// Call it!
List<Pet> pets = client.listPets();
就是这样!
我知道我来晚了一点,但 Feign 是一个不错的选择。我在 Spring Boot 应用程序中使用了它,这些应用程序是本身消耗其他内部 Web 服务的 Web 服务。只需编写一个 Java 接口并对其进行最少的注释,并为您完成样板代码,这真是太好了。
https://github.com/OpenFeign/feign
有关 Spring 集成的更多信息,请参阅 https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/
请注意,最新的 Feign 至少需要 Java 8,但如果需要,您应该能够获得支持 Java 6 的版本。
我知道 Java 11 有一个 HttpClient ,它可能适合也可能不适合你的需求,但我承认我对它还不太了解。