簡體   English   中英

405(方法不允許)刪除

[英]405(Method not Allowed) DELETE

問題是這樣的:Spring RESTful web 服務,和一個客戶端。 在服務器上執行 DELETE 請求時,我得到 -> DELETE http://localhost:8080/employee/3/logout 405 (Method Not Allowed)

我已經實現了 CORS 過濾器,但它仍然不起作用。

員工控制器

@Controller
@RequestMapping(value = "/employee")
public class EmployeeController {
    private static final EmployeeRepository employeeRepository = new EmployeeRepository();
public EmployeeController(){
}

@RequestMapping(method = RequestMethod.GET, value = "/{employeeId}")
public ResponseEntity<EmployeeDTO> showEmployeeById(@PathVariable int employeeId)
{
    employeeRepository.setEmployeeAsActive(employeeId);
    EmployeeDTO employeeDTO = employeeRepository.getEmployeeDTOForId(employeeId);
    if(employeeDTO != null)
    {
        return new ResponseEntity<EmployeeDTO>(employeeDTO,HttpStatus.OK);
    }
    return new ResponseEntity<EmployeeDTO>(employeeDTO,HttpStatus.NOT_FOUND);
}

@RequestMapping(method = RequestMethod.GET, value = "/{employeeId}/viewTasks")
public ResponseEntity<List<TaskDTO>> showTasksForEmployeeId(@PathVariable int employeeId)
{
    List<TaskDTO> taskDTOs = employeeRepository.getTasksForEmployee(employeeId);
    if(taskDTOs != null)
    {
        return new ResponseEntity<List<TaskDTO>>(taskDTOs, HttpStatus.OK);
    }
    return new ResponseEntity<List<TaskDTO>>(taskDTOs, HttpStatus.NOT_FOUND);
}

@RequestMapping(method = RequestMethod.DELETE, value = "/{employeeId}/logout}")
public ResponseEntity<Void> logoutEmployeeById(@PathVariable int employeeId)
{
    employeeRepository.logoutEmployeeById(employeeId);
    return new ResponseEntity<Void>(HttpStatus.OK);
}

}

我提出請求的地方:

var url = "http://localhost:8080/employee/" + document.cookie1;
$('#employeeLogout').click(function(){
        $.ajax({
           type: "DELETE",
            url: url + "/logout",
            async: true
        });
        document.cookie1 = null;
        window.location.assign('http://localhost:9000/#/employees');
    });

Aa和我的 CORS 過濾器

    @Component
public class CORSFilter implements Filter {
    //Web container will call a filter when the request was made.
    // CORS filter allows Cross-Origin requests-responses to be performed by adding Access-Controll-Allow-Origin in the header"
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}
}

我遇到了同樣的問題,但仍在努力管理。 問題出在 Spring Security 的某個地方,因為我的代碼在沒有安全性的情況下也能正常工作。 但是當啟用 spring security 時,只允許 GET,PUT、POST 和 DELETE 不起作用。

作為對此的回應,我的問題出在服務器端的映射上。 服務器等待的內容和客戶端發送的內容存在問題。我正在發送名稱,而服務器正在等待用戶名。 所以這是一個愚蠢的錯誤:)。 如果你得到隨機錯誤,一定要檢查愚蠢的錯誤

暫無
暫無

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

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