【问题标题】:JS $http.POST method 405 errorJS $http.POST 方法 405 错误
【发布时间】:2016-09-08 10:16:04
【问题描述】:

在我的 JS 中有这个:

...
        var sourcesToCall = _.compact(sources);
        var jsonfile= {json:JSON.stringify(sourcesToCall)};
        $.ajax({
            type:'POST',
            url: "/info-web/downloadCSV",
            data: jsonfile,
            dataType: "json"
        });
...

我的控制器

@Controller
@RequestMapping(value="/downloadCSV")
public class DownloadCSVController {
    @RequestMapping(method = RequestMethod.GET)
    public void downloadCSV(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws IOException{
        System.out.println("DEBUT TELECHARGEMENT");
        response.setContentType("text/csv");
        String reportName = "CSV_Report_Name.csv";
        response.setHeader("Content-disposition", "attachment;filename="+reportName);

        ArrayList<String> rows = new ArrayList<String>();
        rows.add("Name,Result");
        rows.add("\n");

        for (int i = 0; i < 10; i++) {
            rows.add("Java Honk,Success");
            rows.add("\n");
        }

        Iterator<String> iter = rows.iterator();
        while (iter.hasNext()) {
            String outputString = (String) iter.next();
            response.getOutputStream().print(outputString);
        }

        response.getOutputStream().flush();

        System.out.println("FIN TELECHARGEMENT");

    }
}

我有一个 CorsFilter 类:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCORSFilter implements Filter {
    private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class);

    public SimpleCORSFilter() {
        log.info("SimpleCORSFilter init");
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", "*");// request.getHeader("Origin")
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers",
                "Origin, X-Requested-With, X-Auth-Token, Content-Type, Accept");
        // response.addHeader("Access-Control-Expose-Headers",
        // "X-Requested-With, X-Auth-Token");
        if (request.getMethod() != "OPTIONS") {
            chain.doFilter(req, res);
        } else {
            response.setStatus(HttpServletResponse.SC_OK);
        }
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }
}

在我的 web.xml 中:

<filter>
    <filter-name>CORSFilter</filter-name>
    <filter-class>support.utils.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我的错误:

POST http://localhost:8080/info-web/downloadCSV.json405(方法 不允许)

【问题讨论】:

  • 好吧,只有当请求的类型是 GET 时,您的操作 downloadCSV 才会被触发,但您正在进行 ajax POST 调用。试着把这个@RequestMapping(method = RequestMethod.GET)改成这个@RequestMapping(method = RequestMethod.POST)

标签: javascript java spring


【解决方案1】:

正如我在评论中所说,只有当请求的类型是 GET 时才会触发您的操作 downloadCSV,但您正在进行 ajax POST 调用。试着把这个@RequestMapping(method = RequestMethod.GET)改成这个@RequestMapping(method = RequestMethod.POST)

【讨论】:

    【解决方案2】:

    你还没有在控制器上实现 POST 方法,记下这行,写在后面调用

    @RequestMapping(method = RequestMethod.GET)
    

    我希望这会奏效

    【讨论】:

      猜你喜欢
      • 2015-02-07
      • 2015-04-07
      • 2021-06-16
      • 2013-09-15
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多