2015-09-12 2 views
1

У меня есть следующие классы моделей:Как сериализовать объекты Java как field.path = field.value

package com.ab.model; 

import java.util.List; 

public class Request { 

    public Request(String requestType, Body body, List<String> emails) { 
     this.requestType = requestType; 
     this.body =body; 
     this.emails = emails; 
    } 

    private String requestType; 
    private Body body; 
    private List<String> emails; 

    public String getRequestType() { 
     return requestType; 
    } 

    public void setRequestType(String requestType) { 
     this.requestType = requestType; 
    } 

    public Body getBody() { 
     return body; 
    } 

    public void setBody(Body body) { 
     this.body = body; 
    } 

    public List<String> getEmails() { 
     return emails; 
    } 

    public void setEmails(List<String> emails) { 
     this.emails = emails; 
    } 

} 

class Body { 

    private String content; 
    private List<Header> headers; 

    public Body(String content, List<Header> headers) { 
     this.content = content; 
     this.headers = headers; 
    } 

    public String getContent() { 
     return content; 
    } 
    public void setContent(String content) { 
     this.content = content; 
    } 
    public List<Header> getHeaders() { 
     return headers; 
    } 
    public void setHeaders(List<Header> headers) { 
     this.headers = headers; 
    } 

} 

class Header { 

    private String headerName; 

    public Header (String headerName) { 
     this.headerName = headerName; 
    } 

    public String getHeaderName() { 
     return headerName; 
    } 

    public void setHeaderName(String headerName) { 
     this.headerName = headerName; 
    } 

} 

И следующий экземпляр класса Request:

Request request = new Request(
       "get", 
       new Body("abcdefg", 
         Arrays.asList(new Header("header_one"))), 
       Arrays.asList("[email protected]", "[email protected]")); 

Знаете ли вы библиотека или алгоритм, который может сериализовать объект запроса в следующую строку?

requestType = "get" 
body.content = "abcdefg" 
body.headers[0].headerName = "header_one" 
emails[0] = "[email protected]" 
emails[1] = "[email protected]" 

Я знаю, что могу сериализовать его как JSON, XML, и т.д., но они не подходят моему случай использования. В принципе мне нужна сериализация как: field.nestedField.reallyNestedField = «его примитивное значение»

В качестве следующего шага, я планирую прочитать сгенерированный код и генерировать произвольные данные для каждого поля/nestedField затем десериализации его обратно используя PropertyUtils от Apache, например:

PropertyUtils.setProperty(requestObject, "requestType", "random type"); 
PropertyUtils.setProperty(requestObject, "body.content", "random content"); 
//... 

Большое спасибо! Andrei

ответ

0

Как насчет переопределения методов по умолчанию toString() для чтения и вывода переменных-членов в виде текста. Вы можете использовать super, чтобы обратиться к своему SuperClass и его членам.

PS: У вас нет конструкторов по умолчанию в ваших классах! В случае, если у вас есть конструкторы с вашим списком аргументов, предлагается включить ваш конструктор по умолчанию без аргументов в ваш класс! Особенно, если вы реализуете некоторую логику, связанную с сериализацией/десериализации!

+0

Не могу этого сделать. Классы, которые мне нужно для сериализации, не под моим контролем. Тем не менее, у них есть конструкторы по умолчанию. – AndreiB

Смежные вопросы