未找到媒体类型为text/plain、类型为class java.util.ArrayList、genericType=java.util.List的MessageBodyWriter<;模型.人>;

未找到媒体类型为text/plain、类型为class java.util.ArrayList、genericType=java.util.List的MessageBodyWriter<;模型.人>;,java,hibernate,jersey,jax-rs,Java,Hibernate,Jersey,Jax Rs,我已经编写了一个jersey REST API方法,该方法返回使用hibernate从mysql后端查询的人员列表。这里是方法 @Path("Person") @GET @Produces(MediaType.TEXT_PLAIN) public List<Person> person() { SessionFactory sessionFactory = new Configuration().configure().buil

我已经编写了一个jersey REST API方法,该方法返回使用hibernate从mysql后端查询的人员列表。这里是方法

    @Path("Person")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public List<Person> person()
    {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        Criteria cr = session.createCriteria(Person.class);
        List persons =  cr.list();
        GenericEntity<List<Person>> list = new GenericEntity<List<Person>>(persons) {};
        tx.commit();
        session.close();
        return persons;

    }
当我向上述方法发出get请求时,我得到 严重:未找到媒体类型为text/plain、类型为class java.util.ArrayList、genericType=java.util.List的MessageBodyWriter。
有人能帮我解决这个问题吗?

在这种情况下,我总是做一个包含人员列表的Persons对象。也许有更好的方法,但如果你的工作在时间紧迫的情况下,想把它完成,那么这应该是可行的。如果它不工作,那么我猜没有JSON编组工作,在这种情况下,您会遇到配置问题

import java.util.ArrayList;
import java.util.List;

public class Persons
{
    private List<Person> persons = new ArrayList<>();

    public List<Person> getPersons()
    {
        return persons;
    }

    public void setPersons(List<Person> persons)
    {
        this.persons = persons;
    }
}
import java.util.ArrayList;
导入java.util.List;
公共阶层人士
{
私人列表人员=新的ArrayList();
公众人士名单
{
返回人员;
}
公众人士(名单人士)
{
这个人=人;
}
}

我知道这是一个很老的问题-但是,现在有一个很好的解决方案。当您希望返回对象列表时,可以使用以下代码:

List<KaggleFileResponse> data = kaggleService.listFiles(xxxx);
GenericEntity<List<KaggleFileResponse>> entity = new GenericEntity<List<KaggleFileResponse>>(data) {};
return Response.status(HttpStatus.SC_OK).entity(entity).build();
List data=kaggleService.listFiles(xxxx);
GenericeEntity实体=新的GenericeEntity(数据){};
返回Response.status(HttpStatus.SC_OK).entity(entity.build();

代码将列表转换为可以写回的通用实体。

u要我返回Persons类的实例吗?是。将List person()更改为Persons person(),您可能希望删除已配置的消息正文编写器,并让默认编写器处理它。另外,您是否能够获得任何其他json响应来工作?例如,如果您只返回一个字符串,它是否返回该字符串的JSONified版本?看起来您的客户机请求的是文本/普通媒体类型,而不是json。您可能希望确保您在请求中接受的标题为application/json。我编写了我的消息正文编写器,因为jersey抱怨消息正文编写器不存在,而返回字符串会给我一个json版本的字符串。
List<KaggleFileResponse> data = kaggleService.listFiles(xxxx);
GenericEntity<List<KaggleFileResponse>> entity = new GenericEntity<List<KaggleFileResponse>>(data) {};
return Response.status(HttpStatus.SC_OK).entity(entity).build();