복붙노트

[SPRING] Spring MVC : Error 400 클라이언트가 보낸 요청의 구문이 올바르지 않습니다.

SPRING

Spring 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. ==============================

    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. ==============================

    2.@RequestParam String 조치는 요청에 양식에없는 action이라는 매개 변수가 있음을 나타냅니다. 다음 중 하나를 수행해야합니다.

    @RequestParam String 조치는 요청에 양식에없는 action이라는 매개 변수가 있음을 나타냅니다. 다음 중 하나를 수행해야합니다.

  3. ==============================

    3.또 다른 가능한 원인은 잘못된 순서의 RequestMapping 속성을 갖는 것입니다. 봄 박사가 말한 것처럼 :

    또 다른 가능한 원인은 잘못된 순서의 RequestMapping 속성을 갖는 것입니다. 봄 박사가 말한 것처럼 :

    문서를 아래로 스크롤하면 BindingResult가 model 속성 바로 뒤에 있어야한다는 것을 알 수 있습니다. 요청마다 여러 모델 객체를 가질 수 있으므로 여러 바인딩이 가능합니다.

    다음은 두 가지 예입니다.

  4. ==============================

    4.비슷한 문제에 직면하고 Date와 같은 몇 가지 필드가 구체적인 값을 얻지 못했다는 사실을 알게되었습니다. 특정 값이 필요한 날짜 또는 기타 필드가 양식에 없는지 확인하십시오.

    비슷한 문제에 직면하고 Date와 같은 몇 가지 필드가 구체적인 값을 얻지 못했다는 사실을 알게되었습니다. 특정 값이 필요한 날짜 또는 기타 필드가 양식에 없는지 확인하십시오.

  5. ==============================

    5.오류를 기반으로 :

    오류를 기반으로 :

    Required String parameter 'action' is not present
    

    핸들러 handleSave에 요청을 맵핑하기 위해 Spring에 대한 요청에 action이라는 요청 매개 변수가 있어야합니다.

    붙여 넣은 HTML에는 이러한 매개 변수가 표시되지 않습니다.

  6. ==============================

    6.Controller가 bean에서 "action"값을 찾으려고하지만, 여러분의 예제에 따르면 "action"이라는 bean 이름을 설정하지 않았습니다. name = "action"을 시도하십시오. @RequestParam은 항상 Bean 클래스에서 찾습니다.

    Controller가 bean에서 "action"값을 찾으려고하지만, 여러분의 예제에 따르면 "action"이라는 bean 이름을 설정하지 않았습니다. name = "action"을 시도하십시오. @RequestParam은 항상 Bean 클래스에서 찾습니다.

  7. ==============================

    7.요청 매핑은 / save이지만 POST는 /save.html에 있습니다. POST를 /로 변경하면 문제가 해결됩니다.

    요청 매핑은 / save이지만 POST는 /save.html에 있습니다. POST를 /로 변경하면 문제가 해결됩니다.

  8. ==============================

    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. ==============================

    9.@CookieValue (value = "abc", 필수 = true) 문자열 m

    @CookieValue (value = "abc", 필수 = true) 문자열 m

    내가 진실에서 거짓으로 요구를 바꿨을 때, 그것은 효과가있었습니다.

  10. ==============================

    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 많이

  11. 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