当前位置: 首页 > 面试题库 >

具有XML或JSON的JAX-RS(Jersey)自定义异常

冷夜洛
2023-03-14
问题内容

我有一个使用Jersey构建的REST服务。

我希望能够根据发送到服务器的MIME设置我的自定义异常编写器的MIME。application/json当接收到json和application/xml接收到xml
时返回。

现在我进行了硬编码application/json,但这使XML客户端陷入了黑暗。

public class MyCustomException extends WebApplicationException {
     public MyCustomException(Status status, String message, String reason, int errorCode) {
         super(Response.status(status).
           entity(new ErrorResponseConverter(message, reason, errorCode)).
           type("application/json").build());
     }
}

我可以利用什么上下文来获取当前请求Content-Type

谢谢!

根据答案更新

对于对完整解决方案感兴趣的其他人:

public class MyCustomException extends RuntimeException {

    private String reason;
    private Status status;
    private int errorCode;

    public MyCustomException(String message, String reason, Status status, int errorCode) {
        super(message);
        this.reason = reason;
        this.status = status;
        this.errorCode = errorCode;
    }

    //Getters and setters
}

连同 ExceptionMapper

@Provider
public class MyCustomExceptionMapper implements ExceptionMapper<MyCustomException> {

    @Context
    private HttpHeaders headers;

    public Response toResponse(MyCustomException e) {
        return Response.status(e.getStatus()).
                entity(new ErrorResponseConverter(e.getMessage(), e.getReason(), e.getErrorCode())).
                type(headers.getMediaType()).
                build();
    }
}

其中ErrorResponseConverter是自定义JAXB POJO


问题答案:

您可以尝试将@ javax.ws.rs.core.Context
javax.ws.rs.core.HttpHeaders字段/属性添加到根资源类,资源方法参数或html" target="_blank">自定义javax.ws.rs.ext.ExceptionMapper并调用HttpHeaders.getMediaType()。



 类似资料:
  • 我看到了一个Java RESTFUL webservice,它允许在URL中请求内容类型,并在末尾添加一个扩展,例如 <代码>。xml 这就是我在自己的Web服务中努力实现的内容协商风格。 我知道注释,以及一个方法可以使用语法解析多个类型的事实,方法是添加接受标头,比如使用Postman,Chrome扩展名。 但我不知道如何有效地从一种方法中提取信息,并委托给另一种方法。 我假设REGEX可以与和

  • 问题内容: 我正在使用Jersey来学习JAX-RS(又名JSR-311)。我已经成功创建了一个根资源,并且正在使用参数: 这很好用,并且可以处理Date(String)构造函数可以理解的当前语言环境中的任何格式(例如YYYY / mm / dd和mm / dd / YYYY)。但是,如果提供的值无效或无法理解,则会收到404响应。 例如: 如何自定义此行为?也许是不同的响应代码(可能是“ 400

  • 问题内容: 如何使用Jersey / JAX-RS框架以XML / JSON文档形式返回a并不是很明显。它已经支持s了,但是当涉及到s时,就没有了。即使将嵌入到包装器类中,XML模式中也没有类型。 关于如何在Jersey中将地图编组为XML / JSON文档的任何实用建议? 问题答案: 我知道它的回复很晚,但是我希望有一天它能对某人有所帮助:)我应用的最简单,最快的修复方法是 输出:{“ 1”:“

  • 问题内容: 我正在努力弄清Java中的一些概念: JSR:描述规格,但不包含实际的实现。例如,http://jsr311.java.net/是“ RESTful Web服务的Java™API”的“主页”。它用作JSR-311的所有实现的通用参考。 可以从http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api下载JSR-311的接口(?),但

  • 我们可以通过 实现创建JAX-RS示例。 为此,需要加载 jersey相关jar文件或使用Maven框架。 在这个例子中,我们使用jersey jar文件来实现JAX-RS jersey示例。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 打开Eclipse,创建一个Web工程: restfuljersey,如下图所示 - JAX-

  • 我正在学习Jersey/JAX-RS,需要一些ExceptionMapper方面的帮助。 我有一个UserFacade类、AbstractFacade类和User类本身,它们都是非常标准的,主要是通过在NetBeans中创建一个新的Web服务RestFUL项目生成的。我的问题是,我想现在开始捕捉错误,比如“唯一约束违反”错误。我想我需要实现一个异常映射器...我的门面有以下内容: 这是我得到的错误