9

我正在使用 Jersey 1.2(仍在使用 JDK 1.5)并开发了一个 REST Booking Web 资源和一个相关的 Booking 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"
}

有没有办法将限制信息作为生成模式的一部分包含在内?

非常感谢

4

3 回答 3

7

看起来 jackson-module-jsonSchema 2.5.0+ 现在支持一些注释:

ValidationSchemaFactoryWrapper personVisitor = new    
ValidationSchemaFactoryWrapper();
ObjectMapper mapper = new ObjectMapper();
mapper.acceptJsonFormatVisitor(Person.class, personVisitor);
JsonSchema personSchema = personVisitor.finalSchema();
于 2015-05-16T21:26:46.317 回答
6

没有办法做到开箱即用,但是这个扩展模块:

https://github.com/FasterXML/jackson-module-jsonSchema

应该让您修改模式生成器以添加您想要的任何额外信息。警告:这是一个新项目,可能需要您使用 Jackson 核心组件的 2.2.0-SNAPSHOT 版本。

于 2013-01-03T18:47:13.257 回答
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+,因为上面可以满足我的需要。感谢大家的帮助。

于 2015-05-26T15:46:21.600 回答