2016-10-24 5 views
0

以下は私のプロジェクト構造のスクリーンショットです。 spring-boot-stubモジュールはapiであり、私はそれをSpringブートアプリケーションであるモジュールサーバーで使いたいと思う。私はSwaggerで私のspringboot APIを定義し、それを他のモジュールで使ってコントローラを実装するにはどうすればいいですか?

enter image description here

APIが闊歩することによって生成され、次のようにAPIの一つである:

ProductsApi.class:I実装

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ルートをマップすることはできません

enter image description here

だから私はそれをどのように行うことができますか? api定義を変更するときに、その実装(たとえばURLルート)を変更する必要がないように、api定義モジュールとモジュールを別々に実装する必要があります。

+0

'@ RequestMapping'は具体的なクラスのコンテキスト作成中に春に読み込まれるため、厳密にはインターフェースを認識しません。汚れた回避策は、あなたがコメントアウトしたようにそれをimplに追加し、その値をインターフェース上の静的フィールドに参照することです。 –

答えて

0

この質問は申し訳ありません。実際には、プロジェクトは正しい方法でURLルートをマップできます。上記の問題の真の原因は、コンテンツタイプの不一致です。

関連する問題