error

form.submit / spring 전송 에러

dddzr 2022. 12. 13. 16:21

form submit으로 spring controller에 요청을 보낼때 400에러가 발생함.

"There was an unexpected error (type=Bad Request, status=400).

Required String parameter 'parameter' is not present"

 

파라미터나 url을 잘 못 입력했을 때 나는 에러인데

동일한 코드로 요청을 보내는데 특정 데이터를 보낼 때 만 400에러가 났음.

데이터가 너무 길 경우 (data too long)에 400에러가 나는걸 발견함

요청 성공
요청 실패

 

해당 데이터(param1)를 controller에서 required = false로 주고

form으로 전송하면 다음 데이터(param2)가 없다는 에러가 남.

아예 form에서 전송을 안해야 controller로 요청들어옴.

 

나는 param1에 필요없는 데이터가 포함되어있어서 제거하여 에러 해결했는데

큰 데이터 전송이 필요할 경우는 enctype다른걸로 한다던지(인코딩을 base64로 하면 용량이 늘어나서)

다른 방법 찾아봐야 할 듯

 

form 작성 예시

        var form = document.createElement("form");
        form.setAttribute("method", "post");
        form.setAttribute("action", "preview");

        form.setAttribute("charset", "UTF-8");
        form.setAttribute("enctype", "application/x-www-form-urlencoded");
        form.setAttribute("target", "view");

        addField(form, "param1", JSON.stringify(param1));
        addField(form, "param2", JSON.stringify(param2));

        document.body.appendChild(form);
        previewWin = window.open("", "view");

        form.submit();
        form.parentNode.removeChild(form);

 

Controller

   @RequestMapping(value = "/{pathParam}/preview"
   , method = RequestMethod.POST, produces = "text/plain")
  public ModelAndView preview(HttpServletRequest request
  , @RequestParam(required = false) String param1, @RequestParam String param1
  , @PathVariable("pathParam") String pathParam) throws Exception {    
  	ModelAndView mv = new ModelAndView();
    mv.setViewName(/preview);//뷰의 이름, 경로
    mv.addObject("data", html);//뷰로 보낼 데이터
  	//...
  	return mv;
  }