SpringFox - 隐藏Swagger-ui中对端点调用不需要的某些字段

问题描述 投票:3回答:1

我想知道是否有任何方法可以使SpringFox不显示某个实体的所有字段,这些字段在调用特定端点时不需要。

例如:

拥有以下实体:

public class Car {
    long id;
    String name;
    int wheels;
    String type;
    boolean canFly;
}

以下终点:

@RequestMapping(method = RequestMethod.GET,
                produces = MediaType.APPLICATION_JSON_VALUE)
public Car get(@RequestParam(value = "carId", required = true) long projectId) {
    return carService.get(carId);
}

@RequestMapping(method = RequestMethod.POST,
                consumes = MediaType.APPLICATION_JSON_VALUE,
                produces = MediaType.APPLICATION_JSON_VALUE)
public Car create(@RequestBody Car car) {
    return carService.create(car);
}

@RequestMapping(method = RequestMethod.PUT,
                consumes = MediaType.APPLICATION_JSON_VALUE,
                produces = MediaType.APPLICATION_JSON_VALUE)
public Car update(@RequestBody Car car) {
    return carService.update(car);
}

问题是,在创建汽车端点时,只需要名称和轮子,但在文档中,Swagger-ui显示所有字段,就像它们是必需的一样。我已经尝试过@JsonViews但是Springfox还没有处理它们。

有什么方法可以避免这种情况吗?

java spring swagger swagger-ui springfox
1个回答
0
投票

使用@ApiModelProperty(来自io.swagger.annotations

  • 使用required,您可以定义属性是强制还是可选。
  • 使用hidden,您可以在Swagger UI中隐藏属性,但是如果设置它仍然会返回。

例如:

public class Car {

    @ApiModelProperty(value = "id", required = true)
    long id;

    @ApiModelProperty(value = "wheels", required = true)
    int wheels;

    @ApiModelProperty(value = "name", hidden = true)
    String name;

    @ApiModelProperty(value = "type", hidden = true)
    String type;

    @ApiModelProperty(value = "canFly", hidden = true)
    boolean canFly;
}

由于您使用相同的模型进行请求和响应(使用上面的示例),GET端点文档中的属性也将被隐藏(请记住这一点)。如果您不想要此类行为,请使用单独的模型。

© www.soinside.com 2019 - 2024. All rights reserved.