我的Rest API中有一个字段(在Jersey
+jackson
+Bean Validation
中实现),它是一组封闭的数值。例如,员工等级,它可以是以下值之一:1,2,5,7
。而不是,则不能为每个值定义匹配字符串。
我正在尝试获得生成的swagger
文档,以便为这些值提供一个数字枚举。我尝试了以下方法:
>
@apimodelproperty(allowableValues=“1,2,5,7”)Integer employeeRank
。swagger-ui
没有显示任何枚举,只是在将employeeRank
的类型更改为string
之后。因此不幸的是,allowableValues
只能与String参数一起工作,而我不希望我的模型是这样的。employeeRank必须是整数。定义枚举:
@JsonSerialize(using = BlockSize.OrderTypeSerializer.class)
@JsonDeserialize(using = BlockSize.OrderTypeDeserializer.class)
public enum EmployeeRank {
ONW(1),
TWO(2),
FIVE(5),
SEVEN(7)
int rank;
EmployeeRank(int rank) {
this.rank = rank;
}
@JsonValue
public int getRank() {
return rank;
}
public class RankSerializer extends JsonSerializer<EmployeeRank> {
@Override
public void serialize(EmployeeRank rank, JsonGenerator generator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
generator.writeStartObject();
generator.writeFieldName("rank");
generator.writeNumber(rank.getRank());
generator.writeEndObject();
}
}
public class RankDeserializer extends JsonDeserializer<EmployeeRank> {
@Override
public EmployeeRank deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
int val =jsonParser.getValueAsInt();
if (val == 1) {
return ONE;
}
if (val == 2) {
return TWO;
}
if (val == 5) {
return FIVE;
}
if (val == 7) {
return SEVEN;
}
throw new IOException("Illiegal rank value " + val);
}
}
没有运气。swagger-ui
将枚举以枚举名称(一、二、五、七)的形式呈现
用Swagger在Jersey中定义一组数值来理解它,这似乎是一个相当琐碎的任务。知道吗?
以下是我的资源:
resourceConfig.packages(true, ResponseWrapper.class.getPackage().getName());
resourceConfig.property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
resourceConfig.property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
resourceConfig.register(ApiListingResource.class);
resourceConfig.register(SwaggerSerializers.class);
resourceConfig.register(EncodingFilter.class);
resourceConfig.register(GZipEncoder.class);
resourceConfig.register(DeflateEncoder.class);
resourceConfig.register(JacksonFeature.class);
resourceConfig.register(MultiPartFeature.class);
resourceConfig.register(ValidationConfigurationContextResolver.class);
和我的Swagger初始化器:
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("3.0");
beanConfig.setSchemes(new String[]{"https"});
beanConfig.setHost("localhost");
beanConfig.setBasePath("/api");
beanConfig.setPrettyPrint(true);
beanConfig.setResourcePackage(ApiLevel.class.getPackage().getName());
beanConfig.setScan(true);
更新
在@fehguy的建议下,我升级到了jackson 2.7
。而且有一些进展。请考虑以下枚举:
public enum Status {
@JsonProperty("hello")
ENUM1,
@JsonProperty("world")
ENUM2;
}
运行以下主要应用程序工作:
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Status user = Status.ENUM1;
System.out.println(mapper.writeValueAsString(user));
}
输出是“hello”,这正是我需要的。
但是,swagger-ui
仍然显示枚举值。也许它不处理枚举值上的JSONProperty
注释?
这是一个jackson配置问题。看看在2.6.2或更高版本中使用@JSONProperty
注释,它将允许您为枚举设置友好名称。
我有一个java对象,它有一个名为type的属性,代表一个枚举: 当使用springfox在yaml中生成规范时,该对象在引用对象TypeValue时生成以下输出: 我想做的是在生成doc时忽略枚举类型,从规范中删除枚举类型。这就是我想要的: type:对象属性:op:type:string路径:type:string值:type:对象属性:{}标题:补丁 我尝试使用@ApiModelProper
我想在我的项目中包含swagger,但我不能更改代码或变量名称。 我有一个返回列表的服务: 代码变量来自枚举操作可能的错误: 是否可以将“代码”和TYPE枚举相关联,以便我可以在生成的swagger文档中显示选项列表? 谢谢
在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!
问题内容: 是否可以像下面那样进行枚举 这样,当我按输入值进行搜索时,请说101。它将返回“ rich”?如何在枚举中做到这一点?能举个例子吗?我不想用forloop循环整个枚举来获取string_value。可能? 问题答案: 如其他建议的那样,将with与值一起使用。 然后,提供一种静态方法,该方法通过对所有值的有序列表/数组执行二进制搜索,而不是对枚举值执行强力迭代搜索。 要执行搜索,请从中
我正在使用 swagger(1.2) 来记录我的球衣 jaxrs (2.1) api。我使用 swagger-ui 来显示我的 api。对于 http GET 请求,我在 api endpoint中有一个查询参数作为 @QueryParam(“token”)。Swagger 正在显示此查询参数的字段,但是当我每次收到它的空值时单击“尝试一下!”按钮时。 我还用@ApiParam注释了@ query