我有一节课,说:
class Data {
public int value;
};
我希望生成json模式使用jackson-schema模块,其中包含有效的数据字段范围,例如:
class Data {
@JsonProperties(min = 1)
@JsonProperties(max = 100)
public int value;
};
但是我在jackson-schema的wiki中搜索并且它不支持这个,是否有一些例子来自己制作自定义注释?感谢
答案 0 :(得分:2)
有一种方法可以在jackson架构中包含自定义注释,但是您需要创建如下几个类,我使用它来添加我的自定义标题属性:
创建自己的SchemaFactoryWrapper
public static class YourselfSchemaFactoryWrapper extends SchemaFactoryWrapper{
private static class YourselfSchemaFactoryWrapperFactory extends WrapperFactory {
@Override
public SchemaFactoryWrapper getWrapper(SerializerProvider p) {
SchemaFactoryWrapper wrapper = new YourselfSchemaFactoryWrapper();
if (p != null) {
wrapper.setProvider(p);
}
return wrapper;
};
@Override
public SchemaFactoryWrapper getWrapper(SerializerProvider p, VisitorContext rvc) {
SchemaFactoryWrapper wrapper = new YourselfSchemaFactoryWrapper();
if (p != null) {
wrapper.setProvider(p);
}
wrapper.setVisitorContext(rvc);
return wrapper;
}
};
public YourselfSchemaFactoryWrapper() {
super(new YourselfSchemaFactoryWrapperFactory());
schemaProvider = new YourselfJsonSchemaFactory();
}
}
创建自己的JsonSchemaFactory
您可以根据需要覆盖此类中的JsonSchemaFactory函数。对于这种情况,我只想覆盖字符串模式。
public class YourselfJsonSchemaFactory extends JsonSchemaFactory{
@Override
public StringSchema stringSchema() {
return new YourselfStringSchema();
}
}
创建自己的StringSchema
public class YourselfStringSchema extends StringSchema{
@Override
public void enrichWithBeanProperty(BeanProperty beanProperty) {
super.enrichWithBeanProperty(beanProperty);
JsonPropertyTitle title = beanProperty.getAnnotation(JsonPropertyTitle.class);
if(title != null) this.setTitle(title.value());
}
}
然后定义您自己的注释
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@JacksonAnnotation
public @interface JsonPropertyTitle
{
String value() default "";
}
最后,您可以将此注释用于模型
public class DataModal{
@JsonPropertyTitle("My Custom Title")
private str;
}
答案 1 :(得分:1)
您可以对此(javax.validation.*)
使用Java验证API。
javax.validation.constraints.Size
@Size(min = 1, max = 100, message = "error message")
private String text;
答案 2 :(得分:0)
这样做的一个项目是JJSchema。 JSON Schea的杰克逊模块目前没有这种精细控制。