控制器使用 void 方法返回 404 页面

Controller returning 404 page with void method

我正在使用 Spring 4 开发 Web 应用程序。

我有这个控制器

@RequestMapping(value = "/submitIdesFalse", method = RequestMethod.POST)
public void setSubmitIdesFalse(Map<String, Object> model, Locale loc) throws UnknownHostException, DataIntegrityViolationException, DataException, MysqlDataTruncation{
    final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    final String userName = authentication.getName();

    final Company company = companyService.getCompanyByUser(userName);
    final Integer reportingYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR) - 1; // Previous year
    final License license = licenseService.getLicense(company.getId(), reportingYear);

    if(license.getIsSubmitted()){
        log.debug("Files already submitted");
    }else{
    Date date = new Date();
    license.setId(license.getId());
    license.setIsSubmitted(true);
    license.setDateSubmitted(new Timestamp(date.getTime()));
    license.setUserSubmitted(userName);
    licenseService.saveLicense(license);

    log.debug("User Name is: " + userName);
    log.debug("Company " + company.getName() + " set to Submitted FATCA Status");   

    final String emailList = this.fatcaWebProperties.getProperty(ApplicationPropertyName.EMAIL_LIST.getPropertyName());
    final String[] emailListSplited = emailList.split(",");
    final InetAddress ip = InetAddress.getLocalHost();
    final TimeZone timeZone = TimeZone.getTimeZone("Canada/Eastern");
    final String localDateTime = FatcaWebUtility.getDate();
    final String opesDateTime = FatcaWebUtility.getDateWithTimeZone(timeZone);
    final String companyName = company.getName();
    final Long companyId = company.getId();
    if(!company.getName().equals("OPES")){
        for (int i = 0; i < emailListSplited.length; i++) {
            emailSenderService.sendSubmittedOpesMail(ip, emailListSplited[i], companyId, companyName, localDateTime, opesDateTime, userName);
        }
    }       

}

这是一个无效的方法,调用这个页面的形式是:

<form:form method="post" action="submitIdesFalse.html">                                                                             
    <input type="submit" id="sendGenerateSubmit" value="Generate and Submit" />
</form:form>

调用控制器后 return 出现一个 404 页面,表示未找到 submitIdesFalse.jsp 但我的控制器是 void

我尝试将方法 return 设为 String 并且它 return 是我调用的页面,但是当我设置 void 时它 return这是个奇怪的 404。

我发布了我所有的控制器以确保我没有遗漏任何东西,对代码量感到抱歉。

顺便说一下,我正在使用 Tomcat 7

有什么想法吗?

如果你想让你的控制器保持无效 - 但我看不出有任何理由这样做 - 你必须自己管理 HttpServerResponse,所以你需要类似的东西

public void setSubmitIdesFalse(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response, Locale loc)

在您的控制器完成其工作后,您可以设置适当的 HttpServletResponse,就像我们过去使用 "normal" Servlet 所做的那样,在 Spring 等 MVC 框架出现之前让我们的生活更轻松: -)

控制器是 MVC 模式的三个组件之一。标准控制器应该 return 某物 ,一个 "View" - 即使只有 HTTP 200 OK - 这就是为什么它 不是 通常为空,并且可能 return 一个字符串、一个 ModelAndView 或一个 ResponseBody(RESTFull 控制器)。

只需将 @ResponseBody 放入您的 void 方法即可。