我在将日期传递给控制器​​时遇到异常 - Spring MVC

I am getting exception while passing Date to the controller - Spring MVC

我想用 spring JDBC 从数据库中搜索两个日期的记录。我使用了 startDate=?endDate=? 我需要更正控制器的地方。我收到异常

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver resolveException
WARNING: Resolved [org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'java.sql.Date'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.sql.Date': no matching editors or conversion strategy found]


**`viewemp?start=2021-08-30&end=2021-09-24`**
public class EmpDao {  
JdbcTemplate template;  
  
public void setTemplate(JdbcTemplate template) {  
    this.template = template;  
}  

public List<Event> getEmployees(Date start, Date end){  
    return template.query("select * from Event where startDate=? and endDate=?",new RowMapper<Event>(){  
        public Event mapRow(ResultSet rs, int row) throws SQLException {  
            Event e=new Event();  
            e.setEventName(rs.getString(1));  
            e.setEventOrgName(rs.getString(2));  
            e.setEventFare(rs.getInt(3));  
            e.setStartDate(rs.getDate(4));
            e.setEndDate(rs.getDate(5));
            return e;  
        }  
    });  
}  
}    



public class Event {  
private String eventName;  
private String eventOrgName;  
private int eventFare;  
private Date startDate;
private Date endDate;

} 



@Controller  
public class EmpController {  
    @Autowired  
    EmpDao dao;
   
   @GetMapping("/viewemp")  
public String viewemp(@RequestParam(value="start") @DateTimeFormat(pattern="dd/MM/yyyy") Date start,
        @RequestParam(value="end") @DateTimeFormat(pattern="dd/MM/yyyy") Date end, Model m){  
    List<Event> list=dao.getEmployees(start,end);  
    
    m.addAttribute("list",list);
    return "viewemp";  
}  
    
}





<h1>Add New Employee</h1>
       <form method="get" action="viewemp">  
       <input type="date" id="start" name="start"/>
        <input type="date" id="end" name="end"/>
        <input type="submit" value="Filter" />
        
        </form>

您应该定义日期格式 @DateTimeFormat:

@RequestParam(value="start") @DateTimeFormat(pattern="dd/MM/yyyy") Date start,

并在请求中将日期作为字符串传递,例如:

/viewemp?start=05/09/2021&end=06/09/2021

所以你的控制器应该是这样的:

    @GetMapping("/viewemp")
    public String viewemp(@RequestParam(value="start") @DateTimeFormat(pattern="dd/MM/yyyy") Date start,
                          @RequestParam(value="end") @DateTimeFormat(pattern="dd/MM/yyyy") Date end, Model m){
 List<Event> list=dao.getEmployees(start,end);  
    
    m.addAttribute("list",list);
    return "viewemp";
}

检查你的 XML。您可能错过了要包含的 。 并且控制器更改为

@RestController  
public class EmpController {  
    @Autowired  
    EmpDao dao;
   
    @PostMapping("/viewemp")
    public String viewemp(@RequestParam(value="start") @DateTimeFormat(pattern="yyyy-MM-dd") Date start,
                          @RequestParam(value="end") @DateTimeFormat(pattern="yyyy-MM-dd") Date end, Model m){
        List<Event> list=dao.getEmployees(start,end);  
    
    m.addAttribute("list",list);
    return "viewemp";
}
}