2017-08-04 13 views
0

闊歩は、すべてのコントローラからマッピングをGET POSTマッピングし、一つの方法との唯一の方法を示しているGET。闊歩はと、別の方法がPOSTマッピングをGET無視しPUTマッピングを削除してすべてのメソッドを無視します。私の設定:のpom.xmlで闊歩はPOSTを持つ唯一の方法を示しており、春の起動に構成マッピング

@Configuration 
@EnableSwagger2 
public class SwaggerConfig { 

    @Bean 
    public Docket api(){ 
     return new Docket(DocumentationType.SWAGGER_2) 
       .select() 
       .apis(RequestHandlerSelectors.basePackage("my.project.controllers")) 
       .paths(PathSelectors.ant("/api/*")) 
       .build(); 
    } 
} 

依存関係:

 <dependency> 
      <groupId>io.springfox</groupId> 
      <artifactId>springfox-swagger2</artifactId> 
      <version>2.7.0</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>io.springfox</groupId> 
      <artifactId>springfox-swagger-ui</artifactId> 
      <version>2.7.0</version> 
      <scope>compile</scope> 
     </dependency> 

私のコントローラコード:

@RestController @RequestMapping(値は= "/ API /ユーザーは" =「アプリケーションを生成/ json; charset = UTF-8 ") public class UserController {

@Autowired 
private UserService userService; 

protected UserService getService() { 
    return userService; 
} 

@RequestMapping(method = GET) 
public Page<User> query(@RequestParam Map<String, Object> parameters, Pageable pageable) { 
    return getService().query(parameters, pageable); 
} 

@ResponseStatus(CREATED) 
@RequestMapping(method = RequestMethod.POST) 
public ResponseEntity<User> create(@RequestBody User entity) { 
    return ResponseEntity.status(HttpStatus.CREATED).body(getService().create(entity)); 
} 

@RequestMapping(value = "/{id:[0-9]+}", method = RequestMethod.PUT) 
public ResponseEntity<User> update(@PathVariable Long id, @RequestBody User entity) { 
    return ResponseEntity.ok(getService().update(id, entity)); 
} 

@RequestMapping("/current") 
public ResponseEntity current() { 
    return ResponseEntity.ok(userService.getUser()); 
} 

@ResponseStatus(HttpStatus.OK) 
@RequestMapping(value = "/{id:[0-9]+}/enable", method = RequestMethod.POST) 
public void enable(@PathVariable("id") final long id) { 
    userService.enable(id); 
} 

@ResponseStatus(HttpStatus.OK) 
@RequestMapping(value = "/{id:[0-9]+}/disable", method = RequestMethod.POST) 
public void disable(@PathVariable("id") final long id) { 
    userService.disable(id); 
} 

@RequestMapping(value = "/histories", method = RequestMethod.GET) 
public List<UserHistory> histories() { 
    return userService.histories(); 
} 

}

私はいくつかの設定を追加したり、何か別のものを追加する必要がありますか?

+0

コントローラコードを表示してください。 –

+0

コントローラコードを追加しました。他のコントローラーは同じです。 Swaggerはクエリメソッドと作成メソッドのみを表示します。 –

答えて

1

あなたのコントローラに基づいて、私はあなたが闊歩の設定でパス照合におけるもう一つの星を追加すべきだと思う:

.paths(PathSelectors.ant("/api/**"))

例えば/ API /ユーザー/電流/ APIによってマッチングされません/ *しかしby/api/**、そしてなぜこのように文書化された基本パスのエンドポイントだけを得ているのでしょうか?

+0

もう1つ星を追加すると、アプリケーションは例外をスローします: 'org.springframework.context.ApplicationContextException:Bean 'documentationPluginsBootstrapper'を開始できませんでした。ネストされた例外はcom.google.common.util.concurrent.UncheckedExecutionException:java.lang.ArrayIndexOutOfBoundsException:1'です。 この例外は何ですか?) –

+0

weird。 '.paths(regex("/api。* "))'または '.paths(PathSelectors.ant("/api ** "))' –

+0

私はそれを解決しました。 ありがとう、ザカリア。あなたの答えは正しいです。 この例外は、私のコントローラの1つでは、ジェネリックのないパラメータ "java.util.Map"を持っているために表示されます。 ""をマップに追加すると、問題が解決しました。 次のタスク - swagger.ioのサンプルプロジェクトのように、認可を追加します。 –

関連する問題