首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理Jackson异常

处理Jackson异常
EN

Stack Overflow用户
提问于 2014-09-05 18:04:13
回答 1查看 4.6K关注 0票数 1

我用球衣做了一个休息,我试着处理异常。我注册了jackson如何默认使用这个类来执行与json映射有关的所有操作:

代码语言:javascript
复制
@javax.ws.rs.ApplicationPath("/")
public class MyApplication extends ResourceConfig {
   public MyApplication() {
       packages("controller");
       register(JacksonFeature.class);       
   }
}

我定义了一个异常映射程序来捕获一些异常,例如使用以下类的"UnauthorizedException“和"BadRequestException”:

代码语言:javascript
复制
@Provider
public class ClientExceptionMapper implements ExceptionMapper<BaseException>
{
    @Override
    public Response toResponse(BaseException ex) 
    {
        System.out.println("qwertweryt");
        if(ex instanceof UnauthorizedException)
        {
            System.out.println("Unauthorized!");
            return (((UnauthorizedException)ex).getResponse());
        }
        else if(ex instanceof BadrequestException)
        {
            System.out.println("Badrequest!");
            return (((BadrequestException)ex).getResponse());
        }
        return null;
    }
}

其中BaseException、UnauthorizedException和BarequestException分别为:

代码语言:javascript
复制
public abstract class BaseException extends WebApplicationException
{
    private Response r;

    public BaseException(Response response)
    {
        r = response;
    }

    public Response getResponse()
    {
        return r;
    }
}

public class UnauthorizedException extends BaseException
{
    public UnauthorizedException(Response response)
    {
        super(response);
    }
}

public class BadrequestException extends BaseException
{
    public BadrequestException(Response response)
    {
        super(response);
    }
}

因此,在处理jackson exceptions...In事实之前,所有操作都很好--我定义了另一个异常映射器,类似于第一个异常映射器,以处理由jackson生成的所有异常(例如,JsonMappingException),但无法工作。我向您报告我的应用程序所获得的错误:

代码语言:javascript
复制
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "serverr" (Class controller.server.control.response.GetServerDetailsResponse), not marked as ignorable
at [Source: org.glassfish.jersey.message.internal.EntityInputStream@701d7463; line: 1, column: 14] (through reference chain: controller.server.control.response.GetServerDetailsResponse["serverr"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659)
at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365)
at org.codehaus.jackson.map.deser.BeanDeserializer._handleUnknown(BeanDeserializer.java:725)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:703)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:181)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:134)
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:72)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:134)

我的第一个问题是:这两个类可能会发生冲突,即在同一个项目中没有两个例外映射器吗?第二个问题是,我如何解决这个问题?我希望我已经说清楚了,并提前感谢你的帮助!

嗨,我刚看了一篇文章,它提出了和我一样的问题,我向你报告了这个问题的链接:Jersey: Returning 400 error instead of 500 when given invalid request body。作为第一件事,我尝试在帖子的第一个答案中编写的代码,但是结果与前面相同:当我在请求正文中插入一个错误时,我总是获得500个错误代码,而不是400个。我还尝试将@JsonIgnoreProperties(ignoreUnknown=true)放在处理拦截请求体的类之上,但对我不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-06 09:40:00

我认为问题在于,您还没有将ExceptionMapper注册到应用程序运行时加载类提供程序中。尝试使用以下代码向其添加mapper类:

代码语言:javascript
复制
   @javax.ws.rs.ApplicationPath("/")
    public class MyApplication extends ResourceConfig {
       public MyApplication() {
           packages("controller");
           register(JacksonFeature.class);
           register(ClientExceptionMapper.class);          
       }
    }

希望它能有所帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25691550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档