Jersey ExceptionMapper无法使用spring boot?

时间:2018-05-14 08:58:08

标签: java spring-boot jersey jax-rs

我正在使用带弹簧靴的球衣,我有一个异常映射器:

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);
    }
}

同时注册并使用调试,我可以看到这个映射器被正确调用,但无论使用junit测试还是手动测试,最终响应如何仍然返回404。

以下是测试:

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

然后在泽西配置中注册:

register(ExceptionMapper.class);

我正在使用带弹簧靴的球衣,不知道如何解决这个问题。任何建议将被认真考虑。

1 个答案:

答案 0 :(得分:0)

  

我可以看到这个映射器被正确调用,但最终响应如何仍然返回404

实施status()方法可能会出现问题。您确定exception.code()会返回401吗?

顺便说一下,使用OptionalImmutableMap是否需要这种复杂程度?你可以使用:

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