2017-01-23 59 views
1

TL; DR:为每个REST Spring Controller自动生成HTTP客户端,以便在Spring编写的其他服务中重用。为Spring Controller自动生成客户端

当使用Spring编写的多个微服务时,我发现自己正在为每个控制器重写客户端。可以说,我写在服务X控制器:

@RestController 
public class SubscriptionController { 

    @Autowired 
    private SubscriptionService subscriptionService; 

    @RequestMapping(value = "/subscription", method = RequestMethod.GET) 
    public SubscriptionDTO getMySubscription() { 
     return subscriptionService.getCurrentUserSubscription(); 
    } 

} 

我将导入的DTO在服务Y,写HTTP请求中的其他服务定义的映射,并为它编写测试。

@Service 
public class SubscriptionApiService { 

    @Autowired 
    private HttpClient httpClinet; 

    public SubscriptionDTO getMySubscription() { 
     return httpClient.get("/subscription", SubscriptionDTO.class); 
    } 

} 

这是一个非常重复的过程,我很确定有人已经编写了一个库来实现这个过程的自动化。但是我找不到那样的东西。任何想法?

+0

Swagger有一个http客户端生成器。你应该检查它 – nowszy94

回答

1

您可以Swagger2

@SpringBootApplication 
@EnableSwagger2 
public class Application extends SpringApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

实现这一点,你可以通过这个网址访问Swagger2 HTML:localhost:8080/swagger-ui.html

我也@ComponentScan我的包,这些都是需要dependenciesSwagger2

<dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger-ui</artifactId> 
     <version>2.5.0</version> 
    </dependency> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger2</artifactId> 
     <version>2.5.0</version> 
    </dependency> 
+0

我正在寻找代码生成,就像nowszy94建议的一样,但是他对于大举的建议并不太直截了当。 –

+1

对不起,我以为你只是想使用'Swagger2'而且你正在运行'SpringBootApplication' –