2013-12-01 3 views
2

Я немного смущен об обработке Исключения или ее отсутствии в RESTEasy с JBoss AS7/Wildfly. Я не совсем уверен, в каком «домене» обработка исключений попадает точно.Обработка некорректного @QueryParam с помощью RESTEasy

Это то, что я использую для тестирования:

@GET 
@POST 
@Path("/test") 
@Produces(MediaType.APPLICATION_JSON) 
public Response test(@QueryParam("id") final long id) { 
    log.info("Incoming request! Wee! With id " + id + "!"); 

    return Response.ok().build(); 
} 

До сих пор, так хорошо. Это ведет себя так, как ожидалось, с localhost/app/rest/test? Id = 123. Однако, когда я добавляю что-то, что не «подходит» в параметре, например localhost/app/rest/test? Id = 123abc, я получаю длинное исключение из RESTEasy, правильно информируя меня о том, что он не вписывается в ожидаемый параметр.

Но я не понимаю, как я могу справиться с этим исключением. Очевидно, что я бы не хотел, чтобы 40-строчная трассировка стека попала в мой основной (или любой) журнал, но сама сделала правильный журнал ошибок. Мое исследование получило общий способ обработки всех исключений типа NumberFormatException, что совершенно не подходит для любого разумного подхода к регистрации.

Итак, как я могу справиться с этой проблемой? Поскольку это происходит «вне» моего кода, я не могу точно его окружить try/catch, а конкретный плохой параметр для конкретного REST-сопоставления на самом деле не является чем-то достаточно общим, чтобы написать приложение Mapper Exception.

+0

Не отвечает ли сервер ошибкой '4xx'? –

+0

Это не так, но я считаю, что это действительно легко настраивается, поэтому я не спрашивал об этом, так как я ожидаю, что смогу обработать эту часть без посторонней помощи. Меня беспокоит только обработка исключений на стороне сервера. – Torque

ответ

0

Странно, что сервер не отвечает с ошибкой 400. Если вы все еще хотите самостоятельно обрабатывать параметры запроса, вы можете сделать фильтр и проверить все параметры запроса. Это должно выглядеть так:

@Provider 
public class PreResourceFilter implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException {  
     MultivaluedMap<String, String> queryParams = requestContext.getUriInfo().getQueryParameters(); 
     // here you need to check desired parameters 
    } 
} 
Смежные вопросы