簡體   English   中英

如何結合 HttpServletRequest + @RestController

[英]How to combine HttpServletRequest + @RestController

我已經用 Java/Spring MVC 開發了我當前的 Web 應用程序。 我通過在一個類上使用 @RestController 注釋公開了我的 REST 服務,看起來像這樣:

@RestController
@RequestMapping("/company")
public class ConcreteCompanyController implements CompanyController {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseStatus(value = HttpStatus.OK)
    @Override
    public JsonCompany get(@RequestParam("name") String name) {
       //omitted
    }

}

我也在使用谷歌庫,它要求我編寫一個看起來像這樣的類(取自谷歌樣本):

public class CalendarAppEngineSample extends AbstractAppEngineAuthorizationCodeServlet {

  static final String APP_NAME = "Google Calendar Data API Sample Web Client";

  static final String GWT_MODULE_NAME = "calendar";

  private static final long serialVersionUID = 1L;

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    PrintWriter writer = response.getWriter();
    writer.println("<!doctype html><html><head>");
    writer.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">");
    writer.println("<title>" + APP_NAME + "</title>");
    writer.println(
        "<link type=\"text/css\" rel=\"stylesheet\" href=\"" + GWT_MODULE_NAME + ".css\">");
    writer.println("<script type=\"text/javascript\" language=\"javascript\" " + "src=\""
        + GWT_MODULE_NAME + "/" + GWT_MODULE_NAME + ".nocache.js\"></script>");
    writer.println("</head><body>");
    UserService userService = UserServiceFactory.getUserService();
    writer.println("<div class=\"header\"><b>" + request.getUserPrincipal().getName() + "</b> | "
        + "<a href=\"" + userService.createLogoutURL(request.getRequestURL().toString())
        + "\">Log out</a> | "
        + "<a href=\"http://code.google.com/p/google-api-java-client/source/browse"
        + "/calendar-appengine-sample?repo=samples\">See source code for "
        + "this sample</a></div>");
    writer.println("<div id=\"main\"/>");
    writer.println("</body></html>");
  }

  @Override
  protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
    return Utils.getRedirectUri(req);
  }

  @Override
  protected AuthorizationCodeFlow initializeFlow() throws IOException {
    return Utils.newFlow();
  }
}

我不知道如何將這些結合起來,以便兩者都可以作為休息服務使用。 我想我可能需要在 web.xml 中做一些事情,但是什么?

編輯:

只是為了澄清。 我的項目中有幾個 RestController,我不想更改它們。 我希望能夠添加像 CalendarAppEngineSample 這樣的文件,並確保 doGet 方法作為休息服務公開。

您只需要將其包含在方法參數列表中:

public JsonCompany get(HttpServletRequest req, @RequestParam("name") String name)  {           
       //omitted
}

它將自動填充,您可以在get方法中使用它。

UPD根據您的最后評論,如果您需要擴展類AbstractAppEngineAuthorizationCodeServlet並保留其簽名,請執行以下操作:

@RestController
@RequestMapping("/company")
public class ConcreteCompanyController extends AbstractAppEngineAuthorizationCodeServlet {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseStatus(value = HttpStatus.OK)
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         String name = request.getParameter("name");
        // omitted code
   }
}

如果它不是你要找的,那么我不明白你需要什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM