Java + Jersey服务器启动错误

时间:2012-03-03 16:13:52

标签: java jersey

尝试启动服务器时出现此错误:

Error processing resource method, public java.lang.String com.restful.res.UsersWS.getUsersLists(java.lang.Long,java.lang.Boolean,java.lang.Integer,java.lang.Boolean,java.lang.Integer,java.lang.Boolean,java.lang.Integer,java.lang.Boolean,java.lang.Integer,java.lang.Double,java.lang.Double) throws org.codehaus.jettison.json.JSONException, for ResourceMethodDispatchProvider, com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider.
com.sun.jersey.api.container.ContainerException: Could not process parameter type class java.lang.Double

这里是我的代码:

@GET
//  @Path("/{userId}/users")
    public String getUsersLists(@QueryParam("userId") Long userId,
//          @PathParam("userId") Long userId,
            @DefaultValue("true") @QueryParam("near") Boolean near,
            @DefaultValue("0") @QueryParam("nearLimit") Integer nearLimit,
            @DefaultValue("true") @QueryParam("pref") Boolean pref,
            @DefaultValue("0") @QueryParam("prefLimit") Integer prefLimit,
            @DefaultValue("false") @QueryParam("fb") Boolean fb,
            @DefaultValue("0") @QueryParam("fbLimit") Integer fbLimit,
            @DefaultValue("false") @QueryParam("adBook") Boolean adBook,
            @DefaultValue("0") @QueryParam("adBookLimit") Integer adBookLimit,
            @DefaultValue("null") @QueryParam("lat") Double lat,
            @DefaultValue("null") @QueryParam("lon") Double lon) throws JSONException {

1 个答案:

答案 0 :(得分:3)

@DefaultValue注释使用带有单个String参数的类型构造函数。

拉起泽西的源代码,它会在运行时检查默认值的有效性,这就是你得到异常的原因; "null"不是Double的有效数字,并且尝试将其传递给构造函数会导致NumberFormatException jersery然后包装其自己的异常并重新抛出。

查看Double的Javadoc,我可能建议的最接近的事情可能是使用"NaN"(非数字)然后在代码中检查它。当然,既然你在谈论纬度和经度,或许只使用"0.0"就好了吗?

编辑添加:如您对问题的评论中所述,选项B可能是一种更健全的方法,可以切换到POST并将JSON发送到您的REST调用,对其进行反序列化到POJO并从那里开始。