Điều tôi có:Tạo Lược đồ Json từ POJO với một twist
Tôi đang tạo một giản đồ JSON từ một pojo. Mã của tôi để tạo lược đồ trông giống như vậy:
ObjectMapper mapper = new ObjectMapper();
TitleSchemaFactoryWrapper visitor = new TitleSchemaFactoryWrapper();
mapper.acceptJsonFormatVisitor(clazz, visitor);
JsonSchema schema = visitor.finalSchema();
schemas.put(clazz, mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema));
Tôi đang tạo một vài lược đồ thông qua mã ở trên. Một trong những POJO có một enum nhúng nội bộ để hạn chế giá trị có thể, như vậy:
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;
}
}
}
}
Đoạn mã trên nên hạn chế các giá trị chuỗi có thể có trong dữ liệu JSON đó là thông qua xung quanh để "Monday", "Thứ ba", "thứ tư", vv
Khi tôi chạy máy phát điện schema trên mã trong câu hỏi, tôi hy vọng sẽ có được một cái gì đó giống như sơ đồ sau:
{
"type" : "object",
"javaType" : "my.package.MyClass",
"properties": {
"startDayOfWeek" : {
"type" : "string",
"enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
}
}
}
nhưng thay vào đó tôi nhận được điều này:
{
"type" : "object",
"id" : "urn:jsonschema:my:package:MyClass",
"title" : "Lmy/package/MyClass;",
"properties" : {
"startDayOfWeek" : {
"type" : "string"
}
}
}
Tôi đã thực hiện một số thao tác trong mã nguồn của Mô-đun lược đồ Jackson và tìm ra điều đang xảy ra là Jackson sử dụng ".toString()" làm phương thức tuần tự mặc định cho loại enum, nhưng tôi cần nó là tạo dòng giống như thế này dựa trên StartDayOfWeek.values()
:
"enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
Có ai biết cách làm điều đó không?
Có lẽ bạn muốn thử JJSchema để thay thế. – fge
Cho rằng tôi nhận được một NPE khi làm theo ví dụ sử dụng của họ, thực tế là đã không có một cập nhật cho dự án trong 6 tháng và thực tế là nó vẫn còn trong trạng thái beta, tôi không nghĩ rằng đó là một lựa chọn tốt – StormeHawke
Bạn có sử dụng bộ lọc deserializer tùy chỉnh để deserialize đúng (ví dụ như enum, không phải là String) ngày của giá trị tuần? – user3159253