Список возврата в списке REST API Jax Rs - PullRequest
0 голосов
/ 27 августа 2018

Я создаю REST API из Java, где я возвращаю список объектов следующим образом:

@Path("/order")
public class OrderService implements IService
{
    @Override
    public Response get()
    {  
        List<DataObj> list = new ArrayList<>();

        List<SubDataObj> subList = new ArrayList<>();
        subList.add(new SubDataObj("1"));

        GenericEntity<List<DataObj>> entity;

        list.add(new DataObj("A", "22", TestEnum.test1, DateTime.now(), subList));
        list.add(new DataObj("B", "23", TestEnum.test2, DateTime.now(), subList));

        entity = new GenericEntity<List<DataObj>>(list){};
        return Response.ok(entity).build();
    }    
}

Здесь служба возвращает штраф Response, если не используется subList, который является списком объектов в классе DataObj. Тем не менее, когда я использую его, я получаю сообщение об ошибке:

SEVERE: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<dyno.scheduler.restservice.DataObj>.

Вот классы DataObj и SubDataObj:

@XmlRootElement
class DataObj
{
    private String name;
    private String age;
    private TestEnum enumVal;
    private DateTime currentDate;
    private List<SubDataObj> subData;

    public DataObj(String name, String age, TestEnum enumVal, DateTime currentDate, List<SubDataObj> subData)
    {
        this.name = name; 
        this.age = age;
        this.enumVal = enumVal;
        this.currentDate = currentDate;
        this.subData = subData;
    }

    public DataObj() {}

    /**
     * @return the name
     */
    public String getName()
    {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name)
    {
        this.name = name;
    }

    /**
     * @return the age
     */
    public String getAge()
    {
        return age;
    }

    /**
     * @param age the age to set
     */
    public void setAge(String age)
    {
        this.age = age;
    }

    /**
     * @return the enumVal
     */
    public TestEnum getEnumVal()
    {
        return enumVal;
    }

    /**
     * @param enumVal the enumVal to set
     */
    public void setEnumVal(TestEnum enumVal)
    {
        this.enumVal = enumVal;
    }

    /**
     * @return the currentDate
     */
    public DateTime getCurrentDate()
    {
        return currentDate;
    }

    /**
     * @param currentDate the currentDate to set
     */
    public void setCurrentDate(DateTime currentDate)
    {
        this.currentDate = currentDate;
    }

    /**
    * @return the subData
    */
    public List<SubDataObj> getSubData()
    {
       return subData;
    }

    /**
    * @param subData the subData to set
    */
    public void setSubData(List<SubDataObj> subData)
    {
       this.subData = subData;
    }
}

DataSubObj класс:

class SubDataObj
{
    private String subId;

    public SubDataObj(String subId)
    {
        this.subId = subId;
    }

    /**
     * @return the subId
     */
    public String getSubId()
    {
        return subId;
    }

    /**
     * @param subId the subId to set
     */
    public void setSubId(String subId)
    {
        this.subId = subId;
    }
}

Я попытался добавить аннотацию @XmlRootElement в свой класс SubDataObj, но это не сработало. Любая помощь будет оценена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...