2014-03-18 57 views
3

我正在寫一些需要與對象的JSON元數據一起工作的東西。用傑克遜提取JSON元數據(原始類型和名稱)

例如下面給出的示例類:

public class MyClassA 
{ 
    @JsonProperty("a") 
    private String a; 

    @JsonProperty("anothername") 
    private Integer b; 

    @JsonProperty("c") 
    private MyClassB c; 
} 

public class MyClassB 
{ 
    private Integer z = -1; 

    @JsonValue 
    public Integer toInteger() 
    { 
     return z;    
    } 
} 

我想知道MyClassA映射到以下屬性名稱和JSON基本類型:(1 - 字符串,anothername - 號,C - 數字)無傑克遜可能正在進行相同的反省。

目前尚不清楚Jackson下的API是否可用於實現這一目標。

+1

是[這](http://stackoverflow.com/a/ 17786708/597419)你的意思是? – Danny

+0

是的,這正是我要找的!權利要求感謝 –

+0

郵政作爲一個答案你點 –

回答

1

您在尋找的是描述您的JSON的模式。這就是jackson module。它可以使用方法如下:

對象:

class Entity { 

    private Long id; 
    private List<Profile> profiles; 

    // getters/setters 
} 

class Profile { 

    private String name; 
    private String value; 
    // getters/setters 
} 

代碼生成模式:

import java.io.IOException; 
import java.util.List; 

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.module.jsonSchema.JsonSchema; 
import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper; 

public class JacksonProgram { 

    public static void main(String[] args) throws IOException { 
     ObjectMapper mapper = new ObjectMapper(); 
     SchemaFactoryWrapper visitor = new SchemaFactoryWrapper(); 
     mapper.acceptJsonFormatVisitor(Entity.class, visitor); 
     JsonSchema schema = visitor.finalSchema(); 
     System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema)); 
    } 
} 

輸出:

{ 
    "type" : "object", 
    "properties" : { 
    "id" : { 
     "type" : "integer" 
    }, 
    "profiles" : { 
     "type" : "array", 
     "items" : { 
     "type" : "object", 
     "properties" : { 
      "name" : { 
      "type" : "string" 
      }, 
      "value" : { 
      "type" : "string" 
      } 
     } 
     } 
    } 
    } 
} 

來源:Create JSON schema from Java class

+1

至少,你可以添加上面的例子複製的頁面...來源:http://stackoverflow.com/questions/17783909/create-json-schema-from-java-class/17786708#17786708 –