2011-02-09 55 views
1

我使用fromString方法创建了自己的类,我相信JAXB将使用它将参数值字符串转换为我的对象。然而,在这个fromString方法里面,我有一个try catch块,它会引发异常。如下所示。JAX-RS异常映射器不处理参数转换时引发的异常?

public class Animal{ 
    public static Animal fromString(final String input){ 

     try{ 
      ... 
     }catch(IllegalArgumentException ae){ 
      throw new CannotConvertAnimalException(); //this is my custom exception 
     } 
    } 
} 

然后,我有如下所示的CannotConvertAnimalException一个映射:

@Component 
@Provider 
public class CannotConvertAnimalExceptionHandler implements ExceptionMapper<CannotConvertAnimalException> 

的事情是,在我的资源的方法。我使用的数据类型动物

@GET 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public Response showAnimalInfo(Animal animal){....} 

事实证明,当参数字符串,它是要转换为动物投CannotConvertAnimalException我custome例外映射器不处理它。它继续抛出ParamException.QueryParamException,并将其提供给我的QueryParamException处理程序来处理响应。

你们是否有任何想法如何使它在转换失败以及CannotConvertAnimalException被抛出时正确的映射器处理它?

回答

3

好的找到了答案。事实证明,无论你试图从字符串转换为对象时抛出的异常都将被包装在QueryParamException中,因此将被QueryParamException ExceptionMapper(如果有的话)处理。要解决这个问题的方法之一是辨别什么异常由QueryParamException包裹,并使用某种映射到QueryParamException事业匹配到正确的处理程序

Map<Exception, ExceptionMapper> mapper; 

catch(Exception e){ 
    exMapper = mapper.get(exception.getCause); 
} 
当然

你需要用正确的异常和它的映射器加载你的映射。我通过让spring向这个变量插入一张地图来做到这一点。

0

尝试使用不同的JAX-RS框架。 (其实你使用哪个框架?)
我想在Wink你的场景会起作用。