簡體   English   中英

JS $http.POST 方法 405 錯誤

[英]JS $http.POST method 405 error

在我的 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.json 405(不允許的方法)

正如我在評論中所說,只有當請求的類型為 GET 時,您的操作 downloadCSV 才會被觸發,但您正在進行 ajax POST 調用。 嘗試將此@RequestMapping(method = RequestMethod.GET)更改為此@RequestMapping(method = RequestMethod.POST)

你還沒有在控制器上實現 POST 方法,記下這一行並寫它用於 post call

@RequestMapping(method = RequestMethod.GET)

我希望這會奏效

暫無
暫無

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

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