错误出现在Java Web客户端中,但是我不明白这些错误出现的原因。

服务器项目上的其余资源

package model.rest;

import javax.ejb.Stateless;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;

@Stateless
@Path("/factorial")

public class FactorialResource {
@GET
public String factorial(@QueryParam("base") long base)    {
return Long.toString($factorial(base));
}
long $factorial(long base){
if(base>=1){
return $factorial(base-1)*base;
}
return 1;
}
}


将Restful Java客户端导入到项目Java ee客户端时。
第49行上出现错误return return.get(String.class);
找不到符号符号:方法get(Class)
location:WebTarget类型的可变资源

package Webservicce;

import javax.ws.rs.ClientErrorException;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.WebTarget;

/**
* Jersey REST client generated for REST resource:FactorialResource
* [/factorial]<br>
* USAGE:
* <pre>
*        ClientRest client = new ClientRest();
*        Object response = client.XXX(...);
*        // do whatever with response
*        client.close();
* </pre>
*
* @author x2010s
*/
public class ClientRest {

private WebTarget webTarget;
private Client client;
private static final String BASE_URI = "http://localhost:8080/SimpleRESTweb/webresources";

public ClientRest() {
    client = javax.ws.rs.client.ClientBuilder.newClient();
    webTarget = client.target(BASE_URI).path("factorial");
}

public String factorial(String base) throws ClientErrorException {
    WebTarget resource = webTarget;
    if (base != null) {
        resource = resource.queryParam("base", base);
    }
    return resource.get(String.class);
}

public void close() {
    client.close();
}

}


小服务程序
原因:实际和正式论点清单的长度不同
在processRequest(请求,响应)行的doGet和doPost中均出现错误;
原因:当前和正式参数列表的长度不同

package controlador;

import Webservicce.ClientRest;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*
* @author x2010s
*/
@WebServlet(name = "Calcular", urlPatterns = {"/calcular.do"})
public class Calcular extends HttpServlet {

/**
 * Processes requests for both HTTP <code>GET</code> and     <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
 protected void processRequest(HttpServletRequest request, HttpServletResponse response, ClientRest factorial, String base)
        throws ServletException, IOException {
    ClientRest rest = new ClientRest();

    request.setAttribute("factorial",factorial);
    request.getRequestDispatcher("index.jsp").forward(request, response);

  }

  // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
 /**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
 @Override
 public String getServletInfo() {
    return "Short description";
 }// </editor-fold>

 }

最佳答案

似乎您正在为某些Jersey版本使用生成器,该生成器与依赖项上的生成器不同。

如果您使用的是Jersey 2.x,那么我想这可以工作:

public String factorial(String base) throws ClientErrorException {
    WebTarget resource = webTarget;
    if (base != null) {
        resource = resource.queryParam("base", base);
    }
    return resource.request().get(String.class);  // <-- changed
}


关于servlet,您应该检查方法签名:processRequest(request, response);在任何地方都没有声明。

09-10 09:58
查看更多