मैं क्या है:एक मोड़ के साथ POJO से Json स्कीमा उत्पन्न
मैं एक 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 में से एक तो की तरह, संभावित मान सीमित करने के लिए एक आंतरिक एम्बेडेड enum है:
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 डेटा कि चारों ओर से पारित कर दिया है करने के लिए "सोमवार", "Tuesday" में संभव स्ट्रिंग मान तक सीमित रखना चाहिए, "बुधवार", आदि
मैं विचाराधीन कोड पर स्कीमा जनरेटर चलाने के लिए, मैं निम्नलिखित स्कीमा की तरह कुछ प्राप्त करने की उम्मीद:
{
"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"
}
}
}
मैंने जैक्सन स्कीमा मॉड्यूल स्रोत कोड में कुछ खुदाई की है और यह पता लगाया है कि जैक्सन का उपयोग ".toString()" को enum प्रकारों के लिए डिफ़ॉल्ट क्रमिकरण विधि के रूप में कर रहा है, लेकिन इसके बजाय मुझे इसके लिए क्या करना है
"enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
किसी को भी ऐसा करने के लिए कैसे पता है: लाइन है कि इस तरह दिखता है StartDayOfWeek.values()
के आधार पर बनाए है?
हो सकता है कि आप के बजाय JJSchema कोशिश करना चाहते हैं। – fge
यह देखते हुए कि मुझे उपयोग के उदाहरण का पालन करते समय एनपीई मिलती है, तथ्य यह है कि परियोजना में 6 महीने में कोई अपडेट नहीं हुआ है और तथ्य यह है कि यह अभी भी बीटा राज्य में स्पष्ट रूप से है, मुझे नहीं लगता कि यह बहुत है अच्छा विकल्प – StormeHawke
क्या आप सप्ताहांत मूल्यों के दिन ठीक से deserialize (यानी enum, स्ट्रिंग के रूप में नहीं) के लिए एक कस्टम deserializer का उपयोग करने के लिए तैयार हैं? – user3159253