2016-05-05 8 views
0

Swagger2をSpringfoxとSpring Bootで使用しています。Swagger + SpringでモデルスキーマにIDを表示しないでください。

@ApiOperation(value = "save", nickname = "Save Store") 
@ApiResponses(value = { 
     @ApiResponse(code = 201, message = "Created"), 
     @ApiResponse(code = 401, message = "Unauthorized"), 
     @ApiResponse(code = 403, message = "Forbidden"), 
     @ApiResponse(code = 500, message = "Failure", response = ErrorResource.class)}) 
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
@ResponseStatus(HttpStatus.CREATED) 
public void save(@Valid @RequestBody Store store, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response) { 
    if (bindingResult.hasErrors()) { 
     throw new InvalidRequestException("Invalid Store", bindingResult); 
    } 

    this.storeService.save(store); 
    response.setHeader("Location", request.getRequestURL().append("/").append(store.getId()).toString()); 
} 

生成されたAPIドキュメントは、モデルスキーマにStoreidを示している:私はそうのように定義されたエンドポイントを持っています。技術的には、Storeを作成する場合、JSONにはidを含めないでください。私はSwagger/Springfoxにidを無視するように指示する方法を見つけようとしていますが、このエンドポイントについてのみです。

答えて

0

あなたは@ApiModelPropertyでクラスのプロパティに注釈をtrueにその隠さプロパティを設定することで、モデルからフィールドを非表示にすることができます。

import io.swagger.annotations.ApiModelProperty; 

public class Store { 

    @ApiModelProperty(hidden = true) 
    private Long id; 

} 

残念ながら、そうすることによって、あなたは入力としてStoreクラスを使用するすべてのエンドポイント上のidフィールドを非表示になります。別のエンドポイントのフィールドを表示するには、別のクラスが必要です。

+0

これは私が必要とするものではありません。私は昨日 '@ JsonView'を使ってそれを理解しました。私はちょっと自分の答えを投稿しています。しかし、提案をありがとう。 – Gregg

+0

この@Greggについて何をしましたか? JsonViewは動作していないようです。 – NeilS

関連する問題