当HttpServer无法找到资源时,在球衣中丢弃自定义404错误的位置

Cur*_*ma_ 7 jersey httpserver http-status-code-404

我想自定义404响应,服务器(不是我)在无法找到所请求的资源时抛出,(或者自己抛出一个自定义的WebApplicationException,如果可以测试一个应用程序中是否存在所请求的资源?可能是资源列表存储在某处?).请不要向我推荐那些建议扩展WebApplicationException的解决方案,因为即使这样做,我的问题是何时抛出它?,当找不到资源时!但如何在泽西框架中表达这种需求

Luk*_*tor 11

泽西岛无法找到终点时抛出 javax.ws.rs.NotFoundException.只需使用异常映射器将其转换为您选择的响应:

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

@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {

    public Response toResponse(NotFoundException exception) {
        return Response.status(Response.Status.NOT_FOUND)
                .entity("No such resource")
                .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 那很棒!注册提供者或资源的另一个选择是为每个类单独执行.在这种情况下,它将是`resourceConfig.register(NotFoundExceptionMapper.class)`或通过init params:`initParams.put(ServerProperties.PROVIDER_CLASSNAMES,NotFoundExceptionMapper.class)`.但是,当您拥有许多资源和提供程序时,程序包扫描非常有用.您可以将其设置为根包,然后自动注册每个使用`@ Resource`或`@ Provider`注释的类. (2认同)