[SPRING] HTTP 상태 405 - 요청 메소드 'POST'가 지원되지 않음 (스프링 MVC)
SPRINGHTTP 상태 405 - 요청 메소드 'POST'가 지원되지 않음 (스프링 MVC)
이 오류가 발생했습니다. HTTP 상태 405 - 요청 방법 'POST'가 지원되지 않습니다.
내가 뭘 하려는지 다른 드롭 다운 상자에서 선택한 다른 값을 기반으로 채워진 드롭 다운 상자가있는 양식을 만드는 것입니다. 예를 들어 customerName 상자에서 이름을 선택하면 .jsp 페이지의 onChange 함수가 실행되고 제출 된 페이지가 customerCountry 상자의 해당 값으로 다시로드됩니다.
그러나이 HTTP 상태 405 오류가 나타납니다. 인터넷에서 솔루션을 검색했지만 도움이되는 정보는 찾을 수 없었습니다. 내 코드의 관련 부분은 다음과 같습니다.
JSP 페이지의 일부
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
.error { color: red; }
</style>
<script>
function repopulate(){
document.deliveryForm.submit();
}
function setFalse(){
document.getElementById("hasId").value ="false";
document.deliveryForm.submit();
// document.submitForm.submit(); (This was causing the error)
}
</script>
</head>
<body>
<h1>Create New Delivery</h1>
<c:url var="saveUrl" value="/test/delivery/add" />
<form:form modelAttribute="deliveryDtoAttribute" method="POST" action="${saveUrl}" name="deliveryForm">
<table>
<tr>
<td><form:hidden id="hasId" path="hasCustomerName" value="true"/></td>
</tr>
<tr>
<td>Customer Name</td>
<td><form:select path="customerName" onChange="repopulate()">
<form:option value="" label="--- Select ---" />
<form:options items="${customerNameList}" />
</form:select>
</td>
<td><form:errors path="customerName" cssClass="error" /></td>
</tr>
<tr>
<td>Customer Country</td>
<td><form:select path="customerCountry">
<form:option value="" label="--- Select ---" />
<form:options items="${customerCountryList}" />
</form:select>
</td>
<td><form:errors path="customerCountry" cssClass="error" /></td>
</tr>
</form:form>
<form:form name="submitForm">
<input type="button" value="Save" onClick="setFalse()"/>
</form:form>
</body>
</html>
컨트롤러의 일부 :
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String getDelivery(ModelMap model) {
DeliveryDto deliveryDto = new DeliveryDto();
model.addAttribute("deliveryDtoAttribute", deliveryDto);
model.addAttribute("customerNameList",
customerService.listAllCustomerNames());
model.addAttribute("customerCountryList", customerService
.listAllCustomerCountries(deliveryDto.getCustomerName()));
return "new-delivery";
}
// I want to enter this method if hasId=true which means that a value in the CustomerName
// drop down list was selected. This should set the CountryList to the corresponding values
// from the database. I want this post method to be triggered by the onChange in the jsp page
@RequestMapping(value = "/add", method = RequestMethod.POST, params="hasCustomerName=true")
public String postDelivery(
@ModelAttribute("deliveryDtoAttribute") DeliveryDto deliveryDto,
BindingResult result, ModelMap model) {
model.addAttribute("deliveryDtoAttribute", deliveryDto);
model.addAttribute("customerNameList",
customerService.listAllCustomerNames());
model.addAttribute("customerCountryList", customerService
.listAllCustomerCountries(deliveryDto.getCustomerName()));
return "new-delivery";
}
// This next post method should only be entered if the save button is hit in the jsp page
@RequestMapping(value = "/add", method = RequestMethod.POST, params="hasCustomerName=false")
public String postDelivery2(
@ModelAttribute("deliveryDtoAttribute") @Valid DeliveryDto deliveryDto,
BindingResult result, ModelMap model) {
if (result.hasErrors()) {
model.addAttribute("deliveryDtoAttribute", deliveryDto);
model.addAttribute("customerNameList",
customerService.listAllCustomerNames());
model.addAttribute("customerCountryList", customerService
.listAllCustomerCountries(deliveryDto.getCustomerName()));
return "new-delivery";
} else {
Delivery delivery = new Delivery();
//Setters to set delivery values
return "redirect:/mis/home";
}
}
이 오류는 어떻게 발생합니까? 어떤 도움을 많이 주시면 감사하겠습니다! 감사
수정 : hasCustomerName hasId 변경되었습니다. 나는 여전히 HTTP 상태 405를 얻는다. 요청 방법 'POST'는 오류를 지원하지 않는다.
EDIT2 : 오류를 일으키는 setFalse 함수의 행을 주석 처리했습니다.
// D
해결법
-
==============================
1.나는 이것이 도움이되는지 확실하지 않지만 같은 문제가있다.
나는 이것이 도움이되는지 확실하지 않지만 같은 문제가있다.
CSRF 보호 기능이있는 springSecurityFilterChain을 사용하고 있습니다. 즉, POST 요청을 통해 양식을 보낼 때 토큰을 보내야 함을 의미합니다. 양식에 다음 입력을 추가하십시오.
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
-
==============================
2.@ResponseBody 또는 @ResponseStatus를 반환하는지 확인하십시오.
@ResponseBody 또는 @ResponseStatus를 반환하는지 확인하십시오.
나는 비슷한 문제가 있었다. 내 컨트롤러는 다음과 같이 보입니다.
@RequestMapping(value="/user", method = RequestMethod.POST) public String updateUser(@RequestBody User user){ return userService.updateUser(user).getId(); }
POST 요청으로 호출 할 때 나는 항상 다음과 같은 오류가 발생했습니다 :
HTTP 상태 405 - 요청 방법 'POST'가 지원되지 않습니다.
얼마 후 메서드가 실제로 호출되었지만 @ResponseBody가없고 @ResponseStatus가 없기 때문에 스프링 MVC는 오류를 발생시킵니다.
이 문제를 해결하려면 @ResponseBody
@RequestMapping(value="/user", method = RequestMethod.POST) public @ResponseBody String updateUser(@RequestBody User user){ return userService.updateUser(user).getId(); }
또는 @ResponseStatus를 메소드에 추가하십시오.
@RequestMapping(value="/user", method = RequestMethod.POST) @ResponseStatus(value=HttpStatus.OK) public String updateUser(@RequestBody User user){ return userService.updateUser(user).getId(); }
-
==============================
3.라인을 변경해야 할 수도 있습니다.
라인을 변경해야 할 수도 있습니다.
@RequestMapping(value = "/add", method = RequestMethod.GET)
에
@RequestMapping(value = "/add", method = {RequestMethod.GET,RequestMethod.POST})
-
==============================
4.문제는 컨트롤러가 hasId = false 또는 hasId = true 매개 변수를 기대하지만 사용자가이를 전달하지 않는다는 것입니다. 숨겨진 필드에는 hasId라는 id가 있지만 hasCustomerName으로 전달되므로 매핑이 일치하지 않습니다.
문제는 컨트롤러가 hasId = false 또는 hasId = true 매개 변수를 기대하지만 사용자가이를 전달하지 않는다는 것입니다. 숨겨진 필드에는 hasId라는 id가 있지만 hasCustomerName으로 전달되므로 매핑이 일치하지 않습니다.
숨겨진 필드의 경로를 hasId 또는 매핑 매개 변수로 변경하여 hasCustomerName = true 또는 hasCustomerName = false를 기대합니다.
-
==============================
5.HTTP 오류의 원인이되는 문제점을 발견했습니다.
HTTP 오류의 원인이되는 문제점을 발견했습니다.
저장 단추에 의해 트리거 된 setFalse () 함수에서 코드가 단추가 포함 된 양식을 제출하려고했습니다.
function setFalse(){ document.getElementById("hasId").value ="false"; document.deliveryForm.submit(); document.submitForm.submit();
내가 document.submitForm.submit ()을 제거하면; 작동 :
function setFalse(){ document.getElementById("hasId").value ="false"; document.deliveryForm.submit()
@Roger Lindsjö 올바른 매개 변수를 전달하지 못한 곳에서 내 오류를 발견해 주셔서 감사합니다!
from https://stackoverflow.com/questions/11145884/http-status-405-request-method-post-not-supported-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] TLD "META-INF / c.tld"를 읽을 수 없습니다. (0) | 2019.02.06 |
---|---|
[SPRING] 스프링 프레임 워크가 XML 기반 구성으로 어노테이션 기반 구성을 재정의 할 수 있습니까? (0) | 2019.02.06 |
[SPRING] RestTemplate PATCH 요청 (0) | 2019.02.06 |
[SPRING] @Autowire (required = false)와 같이 @Inject를 JSR 330에서 선택적으로 사용할 수 있습니까? (0) | 2019.02.06 |
[SPRING] Spring Data JPA 저장소 : 조건 적으로 자식 엔티티를 가져 오는 방법 (0) | 2019.02.06 |