Java 使用带有日期参数的URL中的Restful方法
我有一个restful web服务方法,如下所示:Java 使用带有日期参数的URL中的Restful方法,java,web-services,rest,jakarta-ee,jax-rs,Java,Web Services,Rest,Jakarta Ee,Jax Rs,我有一个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
@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调用该方法?问题是
Date
参数,当我尝试时,该参数为404
未找到或500
内部服务器错误。我建议将日期作为字符串接受并自己解析它。像这样:
@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
解析日期时要考虑的事项:
SimpleDataFormat
非常灵活,可以解析不同的日期格式。字符串为:yyyy-MM-dd
- 被认为是日期/时间的更完整的实现,尤其是用于解析日期
- 通常最好提供日期作为历元时间戳,尤其是当应用程序在不同时区上运行时。但是,在接受历元时间戳时,您必须注意HTTP缓存问题(例如,如果您的客户端没有截断历元时间戳,那么您将获得大量缓存未命中)。我想回顾一下,格式化日期更容易HTTP缓存
这取决于URL中日期的格式。
根据,构造函数Date(String)
可以处理的任何格式都应该有效。如果您的日期格式不同且无法更改,则必须使用pestrella的解决方案,以字符串形式接收日期并自行转换。这是IMHO的首选方式。您的JSON封送器很可能会将Date
类分解为它的字段,因此您的JSON中最终会出现一个对象Date
,而不是一个整洁的字符串
。传递毫秒有效吗?这是一个可接受答案的精确副本,只需在变量名称上做一些小的更改。
@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
@QueryParam("a") String a,
@QueryParam("b") String b,
@QueryParam("date") String str_date) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str_date);
return "hello world";
}