2014-09-21 53 views
0

我想创建一个Jersey应用程序,我想将输出传递给Json格式的Web浏览器。以下是代码。我只能以xml格式传递数据,当我更改为“application/json”格式时,出现“HTTP状态500 - 内部服务器错误”。有什么建议?谢谢。Jersey - Rest API(Json格式)

import java.net.URISyntaxException; 
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; 
import javax.ws.rs.core.Response; 

@Path("/emp") 
public class EmployeeService { 

    @GET 
    @Path("/get/{empID}") 
    @Produces({"application/json"}) 
    public Employee getEmployee(@PathParam("empID") String empID){ 
     Employee employee = new com.rest.employee.model.Employee(); 
     employee.setEmpID(empID); 
     employee.setName("George"); 
     employee.setEmail("[email protected]"); 
     return employee; 
     } 
} 

和另一个Java文件

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlAccessorType(XmlAccessType.NONE) 
@XmlRootElement(name="employee") 

public class Employee { 
    public String empID; 
    public String name; 
    public String email; 

    @XmlElement(required=true) 
    public String getEmpID() { 
     return empID; 
    } 
    public void setEmpID(String empID) { 
     this.empID = empID; 
    } 

    @XmlElement(required=true) 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    @XmlElement(required=true) 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
} 
+0

嘿,你可以显示什么是你的JSON请求? ,如果可能的话,控制台输出它在这些情况下有很多信息 – Vihar 2014-09-21 12:36:26

+0

通常我只会使用@Produces({“application/xml”})来获取xml输出。但是现在我想要获得Json文件。所以我把它改成@Produces({“application/json”})......这会导致错误。 请求应该出来empID,名称和电子邮件。 – user3205874 2014-09-21 14:11:08

+0

尝试添加@Consumes({“application/json”}) – Vihar 2014-09-22 03:58:41

回答

0

代码看起来“近”细而预期为我的作品,但你应该Employee实现Serializable。现在我看不到任何其他问题,所以问题在其他地方我猜。

你说过,它不再工作了,因为你从XML更改为JSON。所以我认为,你错过了JSON的依赖。检查此...

但事实上,缺少的依赖不应该导致500.这是真的,你已经添加了ExceptionMapper,并且你自己扔你的500?

+0

我在整个项目中只有这2个文件。所以我不认为这个错误是由我自己抛出的。是否有可能因为我正在使用最新的Jersey jar文件(2.12)?我想有可能会改变最新球衣的格式。你能上传你所做的代码吗?谢谢。 – user3205874 2014-09-22 10:26:12

+0

真的很奇怪,因为如果你没有匹配的编组器,你应该得到E406(不可接受)而不是E500(内部服务器错误)。如果你真的只有2个文件(Employee.java,EmployeeService.java),你永远不会看到Employee被序列化为XML;)......这些日子将提供一个例子... – zyexal 2014-09-22 15:08:34