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) 个答案