我试图向我创建的api发出请求。我必须提供一个名称(字符串)和一个日期间隔(两个日期)。 我收到以下错误:
无法转换类型' java.lang.String'的值要求的类型 ' java.util.Date&#39 ;;嵌套异常是 java.lang.IllegalArgumentException:无法解析日期:Unparseable 日期:" 20151211"
我尝试了很多日期格式,但都没有。 请求网址是这样的:
http://localhost:8080/api/avaiableRoomTypes?hotel=Marriot&start=20151211&end=20151213
控制器方法:
@RequestMapping(value = "api/avaiableRoomTypes", method = RequestMethod.GET)
public List<Room> CheckRoomTypeAvailability(@RequestParam(value="hotel") String name,@RequestParam(value="start") Date start,@RequestParam(value="end") Date end) {
Hotel hotel = hotels.findByName(name);
Iterable<RoomType> roomtypesList = roomtypes.findByhotel(hotel);
Iterator<RoomType> roomtypesIt = roomtypesList.iterator();
List<Room> roomsList = new ArrayList<Room>();
while(roomtypesIt.hasNext()){
RoomType rt = roomtypesIt.next();
roomsList.addAll(rooms.findWithDates(start, end, rt.getId()));
}
return roomsList;
}
答案 0 :(得分:2)
您需要在方法头中声明一个String,然后在方法中解析Date。
您还应注意,不推荐使用Date的字符串构造函数https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date-java.lang.String-。文档建议使用DateFormat。嗯,这是假设你在java 8上。
答案 1 :(得分:1)
您可以使用您正在使用的模式将 @DateTimeFormat 注释添加到参数中
@RequestMapping(value ="/test")
public @ResponseBody Date test(@RequestParam("start")@DateTimeFormat(pattern="yyyyMMdd") Date start){
System.out.println(start);
return start;
}