2017-01-11 5 views
0

私は現在のWebappをJava/Spring MVCで開発しました。私はこのような何かを探して、クラスに@RestControllerアノテーションを使用して、私のRESTサービスを公開している:HttpServletRequest + @RestControllerを結合する方法

@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 
    } 

} 

私も一種の本のように見えるクラスを記述するために私を必要とし、GoogleのLIBSを使用しています(グーグルから撮影しますサンプル):

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メソッドが休憩サービスとして公開されていることを確認したいと考えています。

答えて

1

あなただけのメソッドパラメータのリストに含める必要があります。

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

それが自動的に入力され、あなたがget方法でそれを使用することができます。あなたがその署名を保っクラスAbstractAppEngineAuthorizationCodeServletを拡張する必要がある場合

UPDはあなたの最後のコメントによると、この操作を行います。それはあなたが探しているものではない場合

@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 
    } 
} 

は、その後、私は理解していませんあなたは何が必要ですか。

+0

それは動作しません、私は "AbstractAppEngineAuthorizationCodeServlet"を拡張する必要があります。私は同じメソッドでそれらを組み合わせることを望んでいません、私は両方のタイプの休憩サービスを同じWebアプリケーションで持つことができるようにしたいと思います。 –

+0

この場合、あなたが何を求めているのかは不明です。 'AbstractAppEngineAuthorizationCodeServlet'を拡張する必要があるなら、それを実行して、すべてのネーミングされたパラメータはSpringによって自動的に埋められます。 – Andremoniy

+0

Googleのサンプルコードをプロジェクトのファイルに置くと、Springは自動的にdoGetメソッドを見つけて休憩サービスとして公開すると言っていますか? –

関連する問題