有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajavax。ws。rs.InternalServerErrorException:Restful for JSON响应中的HTTP 500内部服务器错误

我创建了一个简单的REST应用程序,在该应用程序中,我调用一个服务来返回一个MediaType为JSON的对象列表。但我在执行时得到了以下堆栈跟踪:

javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1032)
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:883)
    at org.glassfish.jersey.client.JerseyInvocation.access$800(JerseyInvocation.java:92)
    at org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:724)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:720)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:430)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:321)
    at com.rws.controller.Handler.doGet(Handler.java:49)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

以下是我的服务:

@Path("/BuyerServer")
public class BuyerServer {

RestDao restDao = new com.rws.dao.RestDao();
@GET
@Path("/products/category/{category}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public List<Product> getProductsByCategory(@PathParam("category") String category) {
    return restDao.getProductsByCategory(category);
}

/**
 * @param minprice
 * @param maxprice
 * @return
 */
@GET
@Path("/products/{minprice}/{maxprice}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public List<Product> getProductsByPrice(@PathParam("minprice") String minprice,@PathParam("maxprice") String maxprice) {
    return restDao.getProductsByPrice(minprice,minprice);
}
}

这是实体类:

@XmlRootElement()
public class Product {

private String productName;
private int productId;
private double price;
private int stock;
private String category;
public Product( int productId,String productName, double price,  String category,int stock, String remarks) {
    super();
    this.productName = productName;
    this.productId = productId;
    this.price = price;
    this.stock = stock;
    this.category = category;
    this.remarks = remarks;
}

private String remarks;

@XmlElement()
public String getProductName() {
    return productName;
}

public void setProductName(String productName) {
    this.productName = productName;
}

@XmlElement()
public int getProductId() {
    return productId;
}

public void setProductId(int productId) {
    this.productId = productId;
}

@XmlElement()
public double getPrice() {
    return price;
}

public void setPrice(double price) {
    this.price = price;
}

@XmlElement()
public int getStock() {
    return stock;
}

public void setStock(int stock) {
    this.stock = stock;
}

@XmlElement()
public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

@XmlElement()
public String getRemarks() {
    return remarks;
}

public void setRemarks(String remarks) {
    this.remarks = remarks;
}

public Product(){

}

}

这是对JSP中的事件执行的客户端代码:

 @WebServlet("/Handler")
public class Handler extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public Handler() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Client client = ClientBuilder.newClient();
    String REST_WS_URI_BUYER = "http://localhost:8015/Restful_Product_Server/rest/BuyerServer/products";
    String REST_WS_URI_SELLER = "http://localhost:8015/Restful_Product_Server/rest/SellerRestService/products";
    String requestFrom = request.getParameter("user");

    if(requestFrom!=null && requestFrom.equalsIgnoreCase("buyer")){

        String REST_WS_URI_CATEGORY = REST_WS_URI_BUYER+"/category";
        GenericType<List<Product>> list = new GenericType<List<Product>>() {};
        List<Product> products1 = (List<Product>) client.target(REST_WS_URI_CATEGORY).path("/{category}").resolveTemplate("category", "STUDY").request(MediaType.APPLICATION_JSON).get(list);


        List<Product> products2  = (List<Product>)client.target(REST_WS_URI_BUYER).path("/{minprice}/{maxprice}").resolveTemplate("minprice", "0").resolveTemplate("maxprice", "500").request(MediaType.APPLICATION_JSON).get(list);

    request.setAttribute("Category", products1);
    request.setAttribute("Price", products2);
   }
  }

如果我将服务方法中的返回类型更改为字符串,则上述服务可以正常工作。我是新来休息的,请帮助我知道我错在哪里,并建议如何解决这个问题


共 (0) 个答案