2017-01-11 2 views
0

Я разработал свой текущий Webapp в Java/Spring MVC. Я выставил свою REST службу с помощью аннотаций @RestController на классе, глядя что-то вроде этого:Как совместить 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, которые требуют, чтобы я написал класс, глядя вроде как это (взято из Googles образец):

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, но что?

Редактировать:

Просто уточнить. У меня есть несколько RestControllers в моем проекте, и я не хочу их менять. Я хочу иметь возможность добавлять файл, например CalendarAppEngineSample, и убедиться, что метод doGet открыт как служба отдыха.

ответ

1

Вам просто нужно включить его в список параметров метода:

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

Если это не то, что вы ищете, то я не понимаю что тебе нужно.

+0

Это не сработает, мне нужно расширить «AbstractAppEngineAuthorizationCodeServlet». Я не хочу объединять их в один и тот же метод, я хочу иметь возможность иметь оба типа услуг отдыха в одном и том же webapp. –

+0

В этом случае непонятно, что вы спрашиваете. Если вам нужно расширить 'AbstractAppEngineAuthorizationCodeServlet' - просто сделайте это, и все невыполненные параметры будут автоматически заполнены весной. – Andremoniy

+0

Вы говорите, что если я положу этот образец кода из Google в файл в моем проекте, то Spring автоматически найдет метод doGet и выставит его в качестве службы отдыха? –

Смежные вопросы