使用日期参数 Java 从 URL 使用 Restful 方法

2022-09-03 14:50:23

我有一个像这样的Restful Web服务方法:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") Date date) {
    // ...business code...
    return "hello world";
}

我如何从WebBrowser调用该方法?,问题是当我尝试时给我找不到或内部服务器错误的参数。Date404500


答案 1

我建议接受日期作为日期并自己解析它。这样:String

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") String date) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dateObj = sdf.parse(date);

    return "hello world";
}

通过浏览器发出此请求的方法是:

http://localhost/your_service/generateInfo?date=2013-02-14

解析日期时要考虑的事项:

  • SimpleDateFormat在解析不同的日期格式时非常灵活。日期字符串的 ISO 标准是:yyyy-MM-dd

  • Joda Java日期API被接受为日期/时间的更完整的实现,有些人认为它比Java的本机日期API更优化,特别是在解析日期方面。

  • 通常最好将日期作为纪元时间戳提供,尤其是在应用程序在不同时区上运行时。但是,在接受纪元时间戳时,您必须注意 HTTP 缓存问题(例如,如果您的客户端未截断纪元时间戳,那么您将收到大量缓存未命中)。我会回到ISO-8601,因为格式化的日期更容易HTTP缓存。


答案 2

这取决于 URL 中日期的格式。根据这个问题,构造函数可以处理的任何格式都应该有效。如果您的日期格式不同并且您无法更改它,则必须使用pestrala的解决方案,并将日期作为字符串接收并自行转换。Date(String)