2012-03-03 62 views
0

尝试启动我的服务器时,我得到这个错误:的Java +新泽西服务器启动错误

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

方法的许多参数表示强*代码气味*。我建议你创建一个bean来聚合并来回传递这些信息。 – Perception 2012-03-03 16:47:43

+0

@Perception - 我有点同意,虽然你可能只想用POST而不是GET,然后发送JSON给REST调用,将球衣反序列化为POJO。 – 2012-03-03 16:56:52

回答

3

@DefaultValue注释使用类型的构造函数,一个单参数String

拉起球衣的源代码,它会在运行时检查缺省值的有效性,这就是为什么你会得到一个异常; "null"不是Double的有效数字,并且试图将其传递给构造函数会导致NumberFormatException,然后jersery会将其自身的异常包装并重新引发。

看着Javadoc的Double,我可以建议的最接近的东西可能是使用"NaN"(不是数字),然后在代码中检查。当然,既然你说的是经纬度,也许只是使用"0.0"会好吗?

编辑补充:正如在评论你的问题,选择B这可能是一个较好的方法是各地会切换到POST和JSON发送到您的REST调用指出的那样,反序列化到一个POJO和从那里出发。

+0

这是(很简单)的答案,我想知道为什么它没有被接受.... – Amalgovinus 2016-06-07 01:56:02