2016-12-05 42 views
0

在這裏我有一個泛型類,如:的Java序列化jacksonGeneric

@JacksonXmlRootElement(localName = "Request") 
    public class Request<T> { 
     @JacksonXmlProperty(isAttribute = false,localName="HeaderInfo") 
     private HeaderInfo headerInfo; 

     //here I want serialization data use T className 
     private T data; 
    } 

例如: 我

Request<User> request; to serialization XML like: 
    <request><headinfo></headinfo><user></user><request> 

Request<SuperUser> request; to serialization XML like: 
    <request><headinfo></headinfo><SuperUser></SuperUser><request> 

等...

+0

我嘗試過「PropertyNamingStrategy」,但它看起來和JSON序列化很相稱,對於XML序列化,它似乎不適合這個 – Winston

回答

0

OK我有解決這個問題的探析 代碼:

public class RequestSerializer extends StdSerializer<Request> { 

    public RequestSerializer() { 
     super(Request.class); 
    } 

    @Override 
    public void serialize(Request request, JsonGenerator jgen, SerializerProvider provider) throws IOException { 
     jgen.writeStartObject(); 
     jgen.writeObjectField("HeaderInfo", request.getHeaderInfo()); 
     String name = request.getRequest().getClass().getSimpleName(); 
     jgen.writeObjectField(name, request.getRequest()); 
     jgen.writeEndObject(); 
    } 
} 



    JacksonXmlModule module = new JacksonXmlModule(); 
    module.setDefaultUseWrapper(true); 
    module.addSerializer(Request.class, new RequestSerializer()); 
    XmlMapper xml = new XmlMapper(module);