gpt4 book ai didi

rest - 在 POST 操作期间在 Jersey 中捕获 SAXNotRecognizedException

转载 作者:行者123 更新时间:2023-12-05 01:25:23 24 4
gpt4 key购买 nike

我正在玩弄并将 Spring MVC REST 项目转换为使用 Jersey,并且在我的一个类中有一个方法注释为

@ExceptionHandler(HttpMessageNotReadableException.class)

这将在 XML 消息的反序列化过程中捕获任何异常。通过这种方式,我可以检测用户何时在 POST 请求中发送错误的 XML 并返回 XML 错误响应,而不是 400/500 标准 HTML 错误页面。

Jersey 有类似的吗?我尝试创建一个异常映射类
@Provider
public class HttpMessageNotReadableException
implements ExceptionMapper<org.xml.sax.SAXNotRecognizedException> {

但这似乎没有捕捉到任何传入的错误,就在我从资源类内部抛出异常时。

所以我想让我的方法获取字符串并进行反序列化并捕获任何错误:
@POST
@Path("/product")
public Response createProduct(String createRequest) {
try {
// de-serialize
// do work ...
} catch ...

代替
@POST
@Path("/product")
public Response createProduct(CreateProduct createRequest) {
// do work ...

但这似乎不对,只是要用相同的错误检查来污染我所有的类。

我还阅读了有关使用实现我自己的阅读器的信息
@Provider
class MyXmlReader implements MessageBodyReader {

但这似乎是在重新发明轮子,因为 JAXB 已经在进行反序列化,我只想捕获错误。

任何人都知道是否有更好的方法来捕获错误的传入 XML?

最佳答案

Jersey 使用完全相同的 @Provider比 Spring(在 JAX-RS 中定义)的方法。我不知道 Spring 如何 un/marshall 对象,但 Jersey 默认使用 JAXB 来处理 XML 和 JSON(如果你告诉它,它可以使用 Jackson 来处理 JSON)。

您是否尝试过捕获 JAXB 异常?

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBException;

@Provider
public class JAXBExceptionMapper implements ExceptionMapper<JAXBException> {
public Response toResponse(JAXBException exception) {
return Response.status(Status.BAD_REQUEST).build();
}
}

关于rest - 在 POST 操作期间在 Jersey 中捕获 SAXNotRecognizedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com