해결: Failed to convert value of type'java.lang.String' to required type 'java.util.Date';

2457 단어
이 오류가 발생한 주요 원인은 Controller 클래스에서 받아들여야 하는 Date 형식이지만, 페이지 쪽에서 전해오는 String 형식이 결국 이 오류를 초래했다.
 
여기에서 데이터가 controller에 도착하기 전에string 데이터를date 형식으로 바꿀 수 있습니다
@Controller
public class UserController{
    
    @RequestMapping(value="/login.do")
    public String login(String username,Date birthday){
        System.out.println("________");
        return "";
    }
        //           ,        
    @InitBinder
    public void initBinder(WebDataBinder binder, WebRequest request) {
        
        //    
        DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));// CustomDateEditor         
    }
}

데이터 형식에 대한 전환을 부류로 추출할 수 있습니다
package com.cfcc.tsms.base.controller;
import com.cfcc.tsms.auth.persistence.dto.TsOrganization;
import com.cfcc.tsms.auth.persistence.dto.TsUser;
import com.cfcc.tsms.base.shiro.ShiroSessionUtils;
import com.cfcc.tsms.common.utils.DateUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import java.beans.PropertyEditorSupport;
import java.sql.Timestamp;
import java.util.Date;


/**
 * gezongyang
 */
public abstract class BaseController {

	protected Logger logger = LoggerFactory.getLogger(this.getClass());


	@InitBinder
	public void initBinder(WebDataBinder binder) {
		// String    ,        String  HTML  ,  XSS  
		binder.registerCustomEditor(String.class, new PropertyEditorSupport() {
			@Override
			public void setAsText(String text) {
				setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));
			}

			@Override
			public String getAsText() {
				Object value = getValue();
				return value != null ? value.toString() : "";
			}
		});

		// Date     
		binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
			@Override
			public void setAsText(String text) {
				setValue(DateUtils.parseDate(text));
			}
		});

		// Timestamp     
		binder.registerCustomEditor(Timestamp.class, new PropertyEditorSupport() {
			@Override
			public void setAsText(String text) {
				Date date = DateUtils.parseDate(text);
				setValue(date == null ? null : new Timestamp(date.getTime()));
			}
		});
	}
}

좋은 웹페이지 즐겨찾기