Ошибка запуска сервера Java + Jersey - PullRequest
0 голосов
/ 03 марта 2012

Я получаю эту ошибку при попытке запустить мой сервер:

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 Ответ

3 голосов
/ 03 марта 2012

В аннотации @DefaultValue используется конструктор типа, который принимает один аргумент String.

Извлекая исходный код для джерси, он проверяет значения по умолчанию для достоверности во время выполнения, поэтому вы получаете исключение;"null" не является допустимым числом для Double, и попытка передать его конструктору приводит к NumberFormatException, который затем обрабатывает jersery в своем собственном исключении и перебрасывает.

Глядя на Javadoc для Double, я бы сказал, что самое близкое, что я могу предложить, это использовать "NaN" (не число) и затем проверить это в своем коде.Конечно, так как вы говорите о широте и долготе, возможно, будет достаточно просто использовать "0.0"

Изменить, чтобы добавить: Как отмечено в комментариях к вашему вопросу, вариант BВероятно, более разумным подходом было бы переключиться на POST и отправить JSON на ваш вызов REST, десериализовать его в POJO и перейти оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...