带有日期的Java Spring RESTFull API请求

时间:2015-12-09 18:10:38

标签: java spring api rest

我试图向我创建的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;

}

2 个答案:

答案 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;
  }