我正在使用带弹簧靴的球衣,我有一个异常映射器:
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);
我正在使用带弹簧靴的球衣,不知道如何解决这个问题。任何建议将被认真考虑。
答案 0 :(得分:0)
我可以看到这个映射器被正确调用,但最终响应如何仍然返回
404
。
实施status()
方法可能会出现问题。您确定exception.code()
会返回401
吗?
顺便说一下,使用Optional
和ImmutableMap
是否需要这种复杂程度?你可以使用:
private Integer status(ApiException exception) {
if (exception.code() == 401) {
return exception.code();
} else {
return 404;
}
}