我在将日期传递给控制器时遇到异常 - 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";
}
}
我想用 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";
}
}