我有的:
我正在从pojo生成JSON模式。我的生成架构的代码如下所示:
ObjectMapper mapper = new ObjectMapper();
TitleSchemaFactoryWrapper visitor = new TitleSchemaFactoryWrapper();
mapper.acceptJsonFormatVisitor(clazz, visitor);
JsonSchema schema = visitor.finalSchema();
schemas.put(clazz, mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema));
我通过上面的代码生成了几个模式。其中一个pojos具有内部嵌入式枚举,以限制可能的值,如下所示:
public class MyClass {
@JsonProperty("name")
private String name;
@JsonProperty("startDayOfWeek")
private MyClass.StartDayOfWeek startDayOfWeek;
/**
* The ID of a timezone returned by the timezones route.
*
*/
@JsonProperty("timezone")
private String timezone;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The startDayOfWeek
*/
@JsonProperty("startDayOfWeek")
public MyClass.StartDayOfWeek getStartDayOfWeek() {
return startDayOfWeek;
}
/**
*
* @param startDayOfWeek
* The startDayOfWeek
*/
@JsonProperty("startDayOfWeek")
public void setStartDayOfWeek(MyClass.StartDayOfWeek startDayOfWeek) {
this.startDayOfWeek = startDayOfWeek;
}
public static enum StartDayOfWeek {
MONDAY("Monday"),
TUESDAY("Tuesday"),
WEDNESDAY("Wednesday"),
THURSDAY("Thursday"),
FRIDAY("Friday"),
SATURDAY("Saturday"),
SUNDAY("Sunday");
private final String value;
private static Map<String, MyClass.StartDayOfWeek> constants = new HashMap<String, MyClass.StartDayOfWeek>();
static {
for (MyClass.StartDayOfWeek c: values()) {
constants.put(c.value, c);
}
}
private StartDayOfWeek(String value) {
this.value = value;
}
@JsonValue
@Override
public String toString() {
return this.value;
}
@JsonCreator
public static MyClass.StartDayOfWeek fromValue(String value) {
MyClass.StartDayOfWeek constant = constants.get(value);
if (constant == null) {
throw new IllegalArgumentException(value);
} else {
return constant;
}
}
}
}
上面的代码应将传递给“星期一”,“星期二”,“星期三”等的JSON数据中可能的String值限制。
当我在有问题的代码上运行模式生成器时,我希望得到类似以下模式的内容:
{
"type" : "object",
"javaType" : "my.package.MyClass",
"properties": {
"startDayOfWeek" : {
"type" : "string",
"enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
}
}
}
但是相反,我得到这个:
{
"type" : "object",
"id" : "urn:jsonschema:my:package:MyClass",
"title" : "Lmy/package/MyClass;",
"properties" : {
"startDayOfWeek" : {
"type" : "string"
}
}
}
我在Jackson模式模块源代码中做了一些挖掘,发现发生的事情是Jackson使用“
.toString()”作为枚举类型的默认序列化方法,但是我需要做的是创建一行基于以下内容StartDayOfWeek.values()
:
"enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
有谁知道这是怎么做到的吗?
Storme的答案参考org.codehaus
,它是jackson的旧版本。以下内容相似,但使用的是fastxml(新版本)。
Pom:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jsonSchema</artifactId>
<version>2.1.0</version>
</dependency>
码:
import ...TargetClass;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsonschema.JsonSchema;
import java.io.IOException;
public final class JsonSchemaGenerator {
private JsonSchemaGenerator() { };
public static void main(String[] args) throws IOException {
System.out.println(JsonSchemaGenerator.getJsonSchema(TargetClass.class));
}
public static String getJsonSchema(Class clazz) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
JsonSchema schema = mapper.generateJsonSchema(clazz);
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);
}
}
我已经编写了一个web服务定义作为OpenAPI文档。我使用的openapi生成器maven插件总是使用poms和gradle构建脚本生成整个项目,但我只需要生成POJO,可能还需要生成API客户端。它应该同样适用于JaxB或JaxWS代码生成器。 那么有没有办法告诉插件只生成Java代码呢?也许有另一个插件可以完成这项工作? 以下是我的配置:
我需要将XML内容绑定到pojo的String属性,为此我创建了自定义DomHandler来提取所需的部分,如下所示 将映射到pojo 我使用XSD生成我的POJO,并且我有几个自定义注释要添加到生成的POJO中,因此我使用maven-jaxb2-plugin。 问题是,它会根据需要添加注释以及与@xmlanyement互斥的@xmlement,有没有办法避免使用XSD添加@xmlement注释?
我正在尝试根据本指南使用OpenDaylight从Yang文件生成Pojos。我从OpenDaylight github克隆了Yang tools,并使用构建了项目 我在pom中添加了以下内容: 但是我无法生成源。我收到以下错误: 我做错了什么?
我的项目需要我自己生成DAO和POJO。必须对其进行某些修改。我的SRS说我必须使用jOOQ。我第一次使用它;我知道jOOQ自己生成POJO和DAO,但我找不到禁用它的方法。 我在jOOQ的文档中找不到任何对我有帮助的东西。有人能告诉我如何从DAO和POJO代禁用jOOQ,但仍然提供记录吗。 Maven pom。xml文件如下: 而且构建使用了gradle。我也不知道这会对更改产生什么影响。
试图用Joda DateTimes生成JooQ POJOs,我遇到了一些问题。POJO使用默认的java.sql从生成器中生成。时间戳值,而不是日期时间。 代码如下。 Create Table(此处时间戳字段的名称已更改)希望确保我没有命中构建系统中的某个缓存。此名称仍应与下面的正则表达式匹配。 转换类——基于文档。 Jooq配置XML。基于文档(感谢您捕获我的表达式/表达式错误Luke)! 创建
问题内容: 我是否可以知道Eclipse插件的Hibernate工具可用于生成JPA实体@entity?生成的Java文件如下所示,而不是JPA: 问题答案: 生成时,只需选择EJB3 + Java5作为配置选项。 了解更多信息:http : //docs.jboss.org/tools/4.0.0.Final/zh/hibernatetools/html_single/index.html#jp