我试图从基本的JAX-RS设置获取JSON输出时出现停止显示错误。我正在尝试Netbeans的Web服务向导,它已经生成了这个默认的“服务”代码:
com.aa.c
当我在package service;
import entities.Manufacturer;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Stateless
@Path("entities.manufacturer")
public class ManufacturerFacadeREST extends AbstractFacade<Manufacturer> {
@PersistenceContext(unitName = "RestDemoPU")
private EntityManager em;
public ManufacturerFacadeREST() {
super(Manufacturer.class);
}
@POST
@Override
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void create(Manufacturer entity) {
super.create(entity);
}
@PUT
@Path("{id}")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void edit(@PathParam("id") Integer id, Manufacturer entity) {
super.edit(entity);
}
@DELETE
@Path("{id}")
public void remove(@PathParam("id") Integer id) {
super.remove(super.find(id));
}
@GET
@Path("{id}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Manufacturer find(@PathParam("id") Integer id) {
return super.find(id);
}
@GET
@Override
@Produces({MediaType.APPLICATION_JSON})
public List<Manufacturer> findAll() {
return super.findAll();
}
@GET
@Path("{from}/{to}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Manufacturer> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
return super.findRange(new int[]{from, to});
}
@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String countREST() {
return String.valueOf(super.count());
}
@Override
protected EntityManager getEntityManager() {
return em;
}
}
方法中移除@Produces
的{{1}}注释以离开MediaType.APPLICATION_XML
时,错误显示出来(我只想要JSON输出)。
XML很好 - 仅JSON的注释引发了findAll()
,带有Java异常:MediaType.APPLICATION_JSON
错误。
使用GlassFish 4.1.1。服务器日志是:
HTTP Status 500 - Internal Server Error
答案 0 :(得分:1)
从4.1.1降级为Glassfish 4.1解决了这个问题。
答案 1 :(得分:1)
这是GlassFish https://java.net/jira/browse/GLASSFISH-21440中的已知错误,该错误实际上在EclipseLink中,并且上面的GlassFish错误报告中描述了一种解决方法。
您可以尝试升级到修复此错误的Payara Server。
答案 2 :(得分:0)
检查您的JDK版本,使用JDK 1.7可能没问题。
答案 3 :(得分:0)
问题是glashfish 4.1.1中缺少jar文件(jackson-module-jaxb-annotations)。您可以从此链接http://www.java2s.com/Code/Jar/j/Downloadjacksonmodulejaxbannotations212jar.htm或google下载jackson模块jaxb注释下载它。 然后将其包含在C:\ Program Files \ glassfish-4.1.1 \ glassfish \ modules中。您可以通过删除版本号来重命名jar文件。重新启动glassfish并重新部署您的应用。这样对我有用