[SPRING] Spring MVC : Error 400 클라이언트가 보낸 요청의 구문이 올바르지 않습니다.
SPRINGSpring MVC : Error 400 클라이언트가 보낸 요청의 구문이 올바르지 않습니다.
이것은 공통적 인 문제로 보입니다. 나는 모든 답변을 그래서 그 일을 만들 수 없습니다. 나는 기존의 웹 응용 프로그램에서 스프링 MVC + Freemarker를 통합하려고합니다. 그것은 GET 요청에 대해 잘 작동하고 Freemarker 템플릿은 아무 문제없이 Controller가 제공 한 Java 객체를 읽습니다. 그러나 양식 제출은 컨트롤러 메소드를 히트 할 수 없습니다. 마지막으로 log4j 작업을했습니다. 내가 얻는 오류는 다음과 같습니다. 오류
HandlerMethod details:
Controller [application.entry.controller.UserController]
Method [public void application.entry.controller.UserController.handleSave(java.lang.String)]
org.springframework.web.bind.MissingServletRequestParameterException:
Required String parameter 'action' is not present
Freemarker :
<form method="POST" action="save.html">
------------
<input type="submit" class="btnnew" name="saveWithoutValidation" value="Save Without Validation"></input>
<input type="submit" class="btnnew" name="submit" value="Submit"></input>
</form>
context-root는 PORTAL입니다. spring-servlet.xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
을 포함한다.
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
제어 장치
@RequestMapping(value="/save", method=RequestMethod.POST)
public void handleSave(@RequestParam String action){
if( action.equals("submit") ){
System.out.println("Damn! You clicked submit");
}
else if( action.equals("saveWithoutValidation") ){
System.out.println("Sweet! You want no string attached.");
}
}
로그의 경우 log4j.logger.org.springframework.web = DEBUG를 기존 log4j.properties에 추가하려고 시도했지만 작동하지 않았습니다.
해결법
-
==============================
1.나는 또한이 문제를 가지고 있었고 나의 해결책은 달랐다. 그래서 비슷한 문제가있는 사람들을 여기에 추가했다.
나는 또한이 문제를 가지고 있었고 나의 해결책은 달랐다. 그래서 비슷한 문제가있는 사람들을 여기에 추가했다.
내 컨트롤러 :
@RequestMapping(value = "/setPassword", method = RequestMethod.POST) public String setPassword(Model model, @RequestParameter SetPassword setPassword) { ... }
문제는 @RequestParameter가 아니라 객체의 @ModelAttribute 여야한다는 것이 었습니다. 이에 대한 오류 메시지는 귀하의 질문에 설명 된 것과 동일합니다.
@RequestMapping(value = "/setPassword", method = RequestMethod.POST) public String setPassword(Model model, @ModelAttribute SetPassword setPassword) { ... }
-
==============================
2.@RequestParam String 조치는 요청에 양식에없는 action이라는 매개 변수가 있음을 나타냅니다. 다음 중 하나를 수행해야합니다.
@RequestParam String 조치는 요청에 양식에없는 action이라는 매개 변수가 있음을 나타냅니다. 다음 중 하나를 수행해야합니다.
-
==============================
3.또 다른 가능한 원인은 잘못된 순서의 RequestMapping 속성을 갖는 것입니다. 봄 박사가 말한 것처럼 :
또 다른 가능한 원인은 잘못된 순서의 RequestMapping 속성을 갖는 것입니다. 봄 박사가 말한 것처럼 :
문서를 아래로 스크롤하면 BindingResult가 model 속성 바로 뒤에 있어야한다는 것을 알 수 있습니다. 요청마다 여러 모델 객체를 가질 수 있으므로 여러 바인딩이 가능합니다.
다음은 두 가지 예입니다.
-
==============================
4.비슷한 문제에 직면하고 Date와 같은 몇 가지 필드가 구체적인 값을 얻지 못했다는 사실을 알게되었습니다. 특정 값이 필요한 날짜 또는 기타 필드가 양식에 없는지 확인하십시오.
비슷한 문제에 직면하고 Date와 같은 몇 가지 필드가 구체적인 값을 얻지 못했다는 사실을 알게되었습니다. 특정 값이 필요한 날짜 또는 기타 필드가 양식에 없는지 확인하십시오.
-
==============================
5.오류를 기반으로 :
오류를 기반으로 :
Required String parameter 'action' is not present
핸들러 handleSave에 요청을 맵핑하기 위해 Spring에 대한 요청에 action이라는 요청 매개 변수가 있어야합니다.
붙여 넣은 HTML에는 이러한 매개 변수가 표시되지 않습니다.
-
==============================
6.Controller가 bean에서 "action"값을 찾으려고하지만, 여러분의 예제에 따르면 "action"이라는 bean 이름을 설정하지 않았습니다. name = "action"을 시도하십시오. @RequestParam은 항상 Bean 클래스에서 찾습니다.
Controller가 bean에서 "action"값을 찾으려고하지만, 여러분의 예제에 따르면 "action"이라는 bean 이름을 설정하지 않았습니다. name = "action"을 시도하십시오. @RequestParam은 항상 Bean 클래스에서 찾습니다.
-
==============================
7.요청 매핑은 / save이지만 POST는 /save.html에 있습니다. POST를 /로 변경하면 문제가 해결됩니다.
요청 매핑은 / save이지만 POST는 /save.html에 있습니다. POST를 /로 변경하면 문제가 해결됩니다.
-
==============================
8.계속 지내세요.
계속 지내세요.
<form method="POST" action="XYZ"> @RequestMapping(value="/XYZ", method=RequestMethod.POST) public void handleSave(@RequestParam String action){
폼 동작 속성 값은 @RequestMapping 값과 일치해야하므로 Spring MVC가이를 해결할 수 있습니다.
또한, 변경 후 404를 제공한다고 말했으므로 컨트롤이 handleSave () 메소드 내부에 있는지 확인하십시오.
handleSave () 메서드에서 아무 것도 반환하지 않으므로, 당신은 그것을 봐야만합니다.
여전히 작동하지 않는다면 스프링 로그를 올릴 수 있습니까?
또한 요청이 다음과 같아야합니다.
/ PORTAL / save
같은 PORTAL / jsp / @RequestMapping (value = "/ jsp / save")에 언급을 저장하는 사이에 있다면
-
==============================
9.@CookieValue (value = "abc", 필수 = true) 문자열 m
@CookieValue (value = "abc", 필수 = true) 문자열 m
내가 진실에서 거짓으로 요구를 바꿨을 때, 그것은 효과가있었습니다.
-
==============================
10.내 문제는 내 모델 특성 후 BindingResult 매개 변수 부족했다.
내 문제는 내 모델 특성 후 BindingResult 매개 변수 부족했다.
@RequestMapping(method = RequestMethod.POST, value = "/sign-up", consumes = "application/x-www-form-urlencoded") public ModelAndView registerUser(@Valid @ModelAttribute UserRegistrationInfo userRegistrationInfo HttpServletRequest httpRequest, HttpSession httpSession) { ... }
내 컨트롤러가 BindingResult를 추가 한 후
@RequestMapping(method = RequestMethod.POST, value = "/sign-up", consumes = "application/x-www-form-urlencoded") public ModelAndView registerUser(@Valid @ModelAttribute UserRegistrationInfo userRegistrationInfo, BindingResult bindingResult, HttpServletRequest httpRequest, HttpSession httpSession) { ..}
Chetz ansver @ sachok_bg @ sashko_bg Mersi 많이
from https://stackoverflow.com/questions/17792274/spring-mvc-error-400-the-request-sent-by-the-client-was-syntactically-incorrect by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RunWith 및 ContextConfiguration 이상한 동작 (0) | 2019.02.11 |
---|---|
[SPRING] Spring Security는 인증 된 사용자 및 인증되지 않은 사용자를 위해, 휴식 서비스에서 사용자 정보를 얻습니다. (0) | 2019.02.11 |
[SPRING] 스프링 보안 / j_spring_security_check을 찾을 수 없음 404 (0) | 2019.02.11 |
[SPRING] 스프링 데이터 JPA : 모델을 우아하게 업데이트하는 방법은 무엇입니까? (0) | 2019.02.11 |
[SPRING] JPA가 트랜잭션을 롤백하는 것을 방지하는 방법은 무엇입니까? (0) | 2019.02.11 |