为Spring Controller自动生成客户端

时间:2017-01-23 09:40:23

标签: java spring

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

当处理使用spring编写的多个微服务时,我发现自己正在为每个控制器重写客户端。假设我在服务X中编写了一个控制器:

@RestController
public class SubscriptionController {

    @Autowired
    private SubscriptionService subscriptionService;

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

}

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

@Service
public class SubscriptionApiService {

    @Autowired
    private HttpClient httpClinet;

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

}

这是一个非常重复的过程,我非常确定有人已经编写了一个库来自动化这个过程。但是我无法找到类似的东西。有什么想法吗?

1 个答案:

答案 0 :(得分: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我的包,这些是dependencies所需的Swagger2

    <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>