![](/img/trans.png)
[英]MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList
[英]MessageBodyWriter not found for media type=text/plain, type=class java.util.ArrayList, genericType=java.util.List<models.Person>
我編寫了一個 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;
}
這是我的MessageBodyWriter
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class PersonMessageBodyWriter implements MessageBodyWriter<Person> {
@Override
public long getSize(Person arg0, Class<?> arg1, Type arg2, Annotation[] arg3, MediaType arg4) {
// TODO Auto-generated method stub
return -1;
}
@Override
public boolean isWriteable(Class<?> type, Type arg1, Annotation[] arg2, MediaType arg3) {
return Person.class.isAssignableFrom(type);
}
@Override
public void writeTo(Person person, Class<?> type, Type type1, Annotation[] arg3, MediaType arg4,
MultivaluedMap<String, Object> arg5, OutputStream out) throws IOException, WebApplicationException {
// TODO Auto-generated method stub
out.write(person.toString().getBytes());
}
}
當我向上述方法發出獲取請求時,我收到了嚴重的問題:找不到 MessageBodyWriter for media type=text/plain, type=class java.util.ArrayList, genericType=java.util.List。 有人可以幫我解決這個問題嗎?
在這種情況下,我一直在做的是創建一個包含人員列表的 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;
}
}
我知道這是一個很老的問題 - 但是,現在有一個很好的解決方案。 每當您希望返回對象列表時,都可以使用以下代碼:
List<KaggleFileResponse> data = kaggleService.listFiles(xxxx);
GenericEntity<List<KaggleFileResponse>> entity = new GenericEntity<List<KaggleFileResponse>>(data) {};
return Response.status(HttpStatus.SC_OK).entity(entity).build();
該代碼將列表轉換為可寫回的通用實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.