尝试启动服务器时出现此错误:
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 {
答案 0 :(得分:3)
@DefaultValue
注释使用带有单个String
参数的类型构造函数。
拉起泽西的源代码,它会在运行时检查默认值的有效性,这就是你得到异常的原因; "null"
不是Double
的有效数字,并且尝试将其传递给构造函数会导致NumberFormatException
jersery然后包装其自己的异常并重新抛出。
查看Double
的Javadoc,我可能建议的最接近的事情可能是使用"NaN"
(非数字)然后在代码中检查它。当然,既然你在谈论纬度和经度,或许只使用"0.0"
就好了吗?
编辑添加:如您对问题的评论中所述,选项B可能是一种更健全的方法,可以切换到POST并将JSON发送到您的REST调用,对其进行反序列化到POJO并从那里开始。