복붙노트

[SPRING] java.lang.String 유형의 등록 정보 값을 필수 유형 java.util.Date로 변환하는 데 실패했습니다.

SPRING

java.lang.String 유형의 등록 정보 값을 필수 유형 java.util.Date로 변환하는 데 실패했습니다.

양식에 날짜를 입력하려고하면이 오류가 발생합니다.

TaskController

@RequestMapping(value = "/docreatetask", method = RequestMethod.POST)
public String doCreateTask(Model model, @Valid Task task,
        BindingResult result, Principal principal,
        @RequestParam(value = "delete", required = false) String delete) {
    System.out.println(">TaskController doCreateTask " + task);

    if (result.hasErrors()) {
        System.out.println("/docreatetask in here");
        model.addAttribute("task", task);
        System.out.println("+++++"+task.getDeadline());// deadline is null  
        return "createtask";
    }
        ...

Create.jsp

...
<form:form method="POST"
action="${pageContext.request.contextPath}/docreatetask"
commandName="task">
<table class="formtable">
    <tr>
        <td class="label">Task</td>
        <td><form:input cssClass="control" path="taskname"
            name="taskname" type="text" /><br />
                <form:errors path="taskname" cssClass="error" /></td>
        </tr>
    <tr>
        <td class="label">Description</td>
        <td><form:textarea cssClass="control" path="description"
            name="description"></form:textarea><br />
                    <form:errors path="description" cssClass="error" /></td>
    </tr>
    <tr>
        <td class="label">Deadline (dd/mm/yyyy)</td>
        <td><form:input cssClass="control" path="deadline"
            name="deadline" type="date" /><br />
                <form:errors path="deadline" cssClass="error"></form:errors></td>
    </tr>
        ...

컨트롤러에서 나는 같은 에러 (그리고 "yyyy / MM / dd"와 같은 다른 포맷들)로 다음과 같이 썼다.

@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    dateFormat.setLenient(false);
    webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}

클래스 (다른 형식으로도 가능)에서 주석을 추가하려고했지만 동일한 오류가 발생했습니다.

​    ...
    @Column(name = "deadline")
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date deadline;
   ...

해결법

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

    1.이것을 컨트롤러에 추가하십시오. 날짜 형식을 로케일 기본 설정으로 변경하십시오.

    이것을 컨트롤러에 추가하십시오. 날짜 형식을 로케일 기본 설정으로 변경하십시오.

    @InitBinder     
    public void initBinder(WebDataBinder binder){
         binder.registerCustomEditor(       Date.class,     
                             new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true, 10));   
    }
    

    모델에서이 주석을 사용하는 것을 고려하십시오 (환경 설정에 대한 형식 및 시간 형식 적용)

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    @Temporal(TemporalType.DATE)
    
  2. ==============================

    2.@DateTimeFormat (pattern = "yyyy-MM-dd")에 (-)를 추가하면됩니다.

    @DateTimeFormat (pattern = "yyyy-MM-dd")에 (-)를 추가하면됩니다.

    예:

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date dateNaissance;
    
  3. ==============================

    3.당신은 initBinder에 대한 BaseController에서 변경해야합니다.

    당신은 initBinder에 대한 BaseController에서 변경해야합니다.

    @InitBinder
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, null,  new CustomDateEditor(dateFormat, true));
    }
    
  4. from https://stackoverflow.com/questions/23702041/failed-to-convert-property-value-of-type-java-lang-string-to-required-type-java by cc-by-sa and MIT license