【问题标题】:Java Spring RESTFull API Request With Dates带有日期的 Java Spring RESTFul API 请求
【发布时间】:2015-12-09 18:10:37
【问题描述】:

我正在尝试向我创建的 api 发出请求。我必须提供名称(字符串)和日期间隔(两个日期)。 我收到以下错误:

无法将“java.lang.String”类型的值转换为所需类型 'java.util.Date';嵌套异常是 java.lang.IllegalArgumentException:无法解析日期:无法解析 日期:“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;

}

【问题讨论】:

标签: java spring api rest


【解决方案1】:

您需要在方法头中声明一个字符串,然后在方法中解析日期。

您还应该注意,日期的字符串构造函数已被弃用 https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date-java.lang.String-。 Docs 建议使用 DateFormat。好吧,假设您使用的是 java 8。

【讨论】:

    【解决方案2】:

    您可以使用您正在使用的模式将 @DateTimeFormat 注释添加到您的参数中

     @RequestMapping(value ="/test")
     public @ResponseBody Date test(@RequestParam("start")@DateTimeFormat(pattern="yyyyMMdd") Date start){
         System.out.println(start);
         return start;
      } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多