我正在使用Jersey 1.2(仍在使用JDK 1.5)并开发了一个REST预订网络资源和一个相关的预订POJO。
我使用Bean Validation来限制字段的大小/类型,例如
@NotNull
@Size(message="invalid size",min=3,max=20)
@Pattern(message="invalid pattern",regexp = "^[A-Za-z]*")
@JsonProperty(value = "forename")
private String forename;
并使用了Jackson ObjectMapper.generateJsonSchema类来生成JSON模式,但这忽略了所有验证注释,所以我得到:
"forename" : {
"type" : "string"
}
有没有办法将限制信息包含在生成的模式中?
非常感谢
答案 0 :(得分:5)
没有办法开箱即用,但这个扩展模块:
https://github.com/FasterXML/jackson-module-jsonSchema
应该允许您以一种方式修改Schema Generator,以添加您想要的任何额外信息。 警告:这是一个新项目,可能需要您使用2.2.0-SNAPSHOT版本的核心Jackson组件。
答案 1 :(得分:4)
看起来jackson-module-jsonSchema 2.5.0+现在支持一些注释:
ValidationSchemaFactoryWrapper personVisitor = new
ValidationSchemaFactoryWrapper();
ObjectMapper mapper = new ObjectMapper();
mapper.acceptJsonFormatVisitor(Person.class, personVisitor);
JsonSchema personSchema = personVisitor.finalSchema();
答案 2 :(得分:1)
只是说这是我修复这个问题的方法..我使用了非常好的jsonschema2pojo插件和标志 - includeJsr303Annotations
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<includes>
<include>*.json</include>
</includes>
<useJodaDates>true</useJodaDates>
<sourceDirectory>${basedir}/src/main/resources/webapi/jsonschema</sourceDirectory>
<targetPackage>com.ba.schema.json.jsonschemav02</targetPackage>
<includeJsr303Annotations>true</includeJsr303Annotations>
<includeHashcodeAndEquals>false</includeHashcodeAndEquals>
<includeToString>false</includeToString>
<outputDirectory>${project.build.directory}/generated-sources/xjc/</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我还没有尝试过jackson-module-jsonSchema 2.5.0+,但上面做了我需要的事情。感谢大家的帮助。