我用Swagger定义了我的springbootapi,怎么在其他模块中使用它来实现controller呢?
I define my springboot api by Swagger, and how can I use it in other modules to implement the controller?
下面是我的项目结构截图。 spring-boot-stub 模块是 api,我想在作为 spring 启动应用程序的模块服务器中使用它。
api由Swagger生成,其中一个api如下:
ProductsApi.class:
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.wondergate.polaris.model.Product;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Api(
value = "products",
description = "the products API"
)
public interface ProductsApi {
@ApiOperation(
value = "",
notes = "Get the list of products",
response = Product.class,
responseContainer = "List",
tags = {}
)
@ApiResponses({ @ApiResponse(
code = 200,
message = "OK",
response = Product.class
)})
@RequestMapping(
value = {"/products"},
produces = {"application/json"},
consumes = {"application/json"},
method = {RequestMethod.GET}
)
ResponseEntity<List<Product>> getProducts();
}
我在模块服务器中实现 api 如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import io.wondergate.polaris.api.ProductsApi;
import io.wondergate.polaris.model.Product;
import io.wondergate.polaris.server.dao.ProductDao;
import io.wondergate.polaris.server.dao.ResourceInfoDao;
import io.wondergate.polaris.server.model.ResourceInfo;
import io.wondergate.polaris.server.model.ServerProduct;
import io.wondergate.polaris.server.utils.Convertor;
@Controller
public class ProductController implements ProductsApi {
@Autowired
private ProductDao productDao;
@Autowired
private ResourceInfoDao resourceInfoDao;
@RequestMapping("/")
@ResponseBody
public String index() {
return "Greetings from Spring Boot!";
}
// @RequestMapping("/products")
public ResponseEntity<List<Product>> getProducts() {
List<Product> productList = new ArrayList<Product>();
Iterable<ServerProduct> allProducts = productDao.findAll();
for (ServerProduct serverProduct : allProducts) {
Iterable<ResourceInfo> resourceInfo = resourceInfoDao.findByProductId(serverProduct.getId());
Product product = Convertor.serverProductToProduct(serverProduct, resourceInfo);
productList.add(product);
}
ResponseEntity<List<Product>> res = new ResponseEntity<List<Product>>(productList, HttpStatus.OK);
return res;
}
}
但是项目虽然可以编译启动成功,但是不能如我所愿的映射url路由,例如
那我该怎么做呢?我想让 api 定义模块和实现模块分开,这样当我修改 api 定义时,我不需要修改它的实现(例如 url 路由)。
我对这个问题感到抱歉。实际上,该项目可以以正确的方式映射 url 路线。出现上述问题的真正原因是内容类型不匹配。
下面是我的项目结构截图。 spring-boot-stub 模块是 api,我想在作为 spring 启动应用程序的模块服务器中使用它。
api由Swagger生成,其中一个api如下:
ProductsApi.class:
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.wondergate.polaris.model.Product;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Api(
value = "products",
description = "the products API"
)
public interface ProductsApi {
@ApiOperation(
value = "",
notes = "Get the list of products",
response = Product.class,
responseContainer = "List",
tags = {}
)
@ApiResponses({ @ApiResponse(
code = 200,
message = "OK",
response = Product.class
)})
@RequestMapping(
value = {"/products"},
produces = {"application/json"},
consumes = {"application/json"},
method = {RequestMethod.GET}
)
ResponseEntity<List<Product>> getProducts();
}
我在模块服务器中实现 api 如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import io.wondergate.polaris.api.ProductsApi;
import io.wondergate.polaris.model.Product;
import io.wondergate.polaris.server.dao.ProductDao;
import io.wondergate.polaris.server.dao.ResourceInfoDao;
import io.wondergate.polaris.server.model.ResourceInfo;
import io.wondergate.polaris.server.model.ServerProduct;
import io.wondergate.polaris.server.utils.Convertor;
@Controller
public class ProductController implements ProductsApi {
@Autowired
private ProductDao productDao;
@Autowired
private ResourceInfoDao resourceInfoDao;
@RequestMapping("/")
@ResponseBody
public String index() {
return "Greetings from Spring Boot!";
}
// @RequestMapping("/products")
public ResponseEntity<List<Product>> getProducts() {
List<Product> productList = new ArrayList<Product>();
Iterable<ServerProduct> allProducts = productDao.findAll();
for (ServerProduct serverProduct : allProducts) {
Iterable<ResourceInfo> resourceInfo = resourceInfoDao.findByProductId(serverProduct.getId());
Product product = Convertor.serverProductToProduct(serverProduct, resourceInfo);
productList.add(product);
}
ResponseEntity<List<Product>> res = new ResponseEntity<List<Product>>(productList, HttpStatus.OK);
return res;
}
}
但是项目虽然可以编译启动成功,但是不能如我所愿的映射url路由,例如
那我该怎么做呢?我想让 api 定义模块和实现模块分开,这样当我修改 api 定义时,我不需要修改它的实现(例如 url 路由)。
我对这个问题感到抱歉。实际上,该项目可以以正确的方式映射 url 路线。出现上述问题的真正原因是内容类型不匹配。