Джерси ExceptionMapper не работает с весенней загрузкой? - PullRequest
0 голосов
/ 14 мая 2018

Я использую майку с пружинной загрузкой, и у меня есть картограф исключения:

package org.smarter.providers;

import com.google.common.collect.ImmutableMap;
import org.smarter.exception.ApiException;

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;

import java.util.Optional;

import static org.smarter.exception.UserException.UNAUTHORIZED;

@Provider
public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<ApiException> {

    @Override
    public Response toResponse(ApiException exception) {
        return Response.status(status(exception)).build();
    }

    private Integer status(ApiException exception) {
        return Optional.ofNullable(ImmutableMap.<String, Integer>builder()
                .put(UNAUTHORIZED, 401)
                .build()
                .get(exception.code()))
                .orElse(404);
    }
}

Также зарегистрирован и с помощью отладки, я вижу, что этот маппер вызывается правильно, но как бы то ни было, окончательный ответ по-прежнему возвращает 404, независимо от того, используется ли тест junit или ручной тест.

Вот тест:

when()
                .get("/users/current/memos/daily")
                .then()
                .statusCode(401);

И затем зарегистрирован в Джерси Конфигурация:

register(ExceptionMapper.class);

Я использую майку с пружинными сапогами и не знаю, как с этим справиться. Любой совет будет оценен.

1 Ответ

0 голосов
/ 17 мая 2018

Я вижу, что этот маппер вызывается правильно, но как бы то ни было, но окончательный ответ все еще возвращает 404.

Возможно, это проблема с реализацией вашего метода status(),Вы уверены, что exception.code() возвращает 401?

Кстати, вам нужен такой уровень сложности, используя Optional и ImmutableMap?Вы можете использовать:

private Integer status(ApiException exception) {
    if (exception.code() == 401) {
        return exception.code();
    } else {
        return 404;
    }
}
...