복붙노트

[SPRING] Spring HTTP Status 400 - 클라이언트가 보낸 요청은 구문 상 올바르지 않습니다 (날짜 입력을 추가 할 때)

SPRING

Spring HTTP Status 400 - 클라이언트가 보낸 요청은 구문 상 올바르지 않습니다 (날짜 입력을 추가 할 때)

jsp 폼에 날짜 필드를 추가 할 때이 오류가 발생하지만,이 오류없이 정상적으로 작동합니다.

의뢰

http://localhost:8080/myTasks/docreatetask?task=hi+there&description=stucked+here&date=2014-02-21&idTaskCategory=1&idTaskPriority=1&idTaskState=1&pending=1&idUser=0&idUser_responsible=0&evaluation=aaaaaa

부분 form.jsp

<form method="GET"
    action="${pageContext.request.contextPath}/docreatetask">
    <table>
        <tr>
            <td>Task</td>
            <td><input name="task" type="text" /></td>
        </tr>
        <tr>
            <td>Description</td>
            <td><textarea name="description"></textarea></td>
        </tr>
        <tr>
            <td>Date</td>
            <td><input name="date" type="date"/></td>
        </tr>

부분적으로 Task.java 구성 요소

@Component("task")
public class Task {

    private long id;
    private String task;
    private String description;
    private Date date;
    private Date deadline;
    private Category category;
    private Priority priority;
    private State state;
    private User user;
    private User userResponsible;
    private String evaluation;
    private Date timestamp;
    private int pending;

부분적으로 작업 컨트롤러

@RequestMapping("/createtask")
public String createTask(Model model) {
    List<Category> categories = taskService.getCategories();
    List<Priority> priorities = taskService.getPriorities();
    List<State> states = taskService.getStates();
    List<User> users = taskService.getUsers();

    model.addAttribute("categories",categories);
    model.addAttribute("priorities",priorities);
    model.addAttribute("states",states);
    model.addAttribute("users",users);

    return "createtask";
}


@RequestMapping(value="/docreatetask", method=RequestMethod.GET)
public String doCreateTask(Model model, Task task) {
    System.out.println(">TaskController doCreateTask " + task);

    return "taskcreated";
}

어떤 아이디어 일 수 있니?

미리 감사드립니다.

오류에 대한 새로운 추가 정보 일부 유효성 검사 주석을 추가하고 오류에 대한 새로운 정보를 얻었습니다.

해결법

  1. ==============================

    1.두 가지 문제가 있습니다.

    두 가지 문제가 있습니다.

    한 가지 문제는 http 메서드를 사용하는 것일 수 있다고 생각합니다. GET 요청은 URL 쿼리 문자열 (? 뒤에 오는 항목)을 사용하여 매개 변수를 보냅니다. 그러나 URL의 전체 길이는 브라우저, chaches, 웹 서버에 의해 기술적으로 제한됩니다. 따라서 문제의 원인 중 하나는 매개 변수가 많거나 "긴"값 (예 : 긴 설명)이있는 경우 URL이 길어질 수 있습니다.  (이것이 맞지만 원인은 아닙니다)

    그래서 대신 http 메서드 POST를 사용하는 것이 좋습니다. 그리고 POST를 사용하면 서버에서 뭔가를 변경하는 요청에 대한보다 나은 동사가됩니다 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html).

  2. ==============================

    2.오랫동안 나는 또한이 문제에 직면했다.

    오랫동안 나는 또한이 문제에 직면했다.

    나는 그것을 사용하여 해결 :

    @InitBinder
    
    protected void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                dateFormat, false));
    }
    
  3. from https://stackoverflow.com/questions/21929232/spring-http-status-400-the-request-sent-by-the-client-was-syntactically-incorr by cc-by-sa and MIT license