在GAE标准上自定义杰克逊绑定引发的异常

时间:2019-02-16 09:29:37

标签: java google-app-engine jackson jackson-databind

我一直在寻找一种方法来定制 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); FirebaseApp.initializeApp(Context) 上的Jackson绑定引发的异常。

问题是当我发送一个字符串参数时,其中GAE方法期望API抛出Integer的{​​{1}}。我想自定义异常引发的消息,但找不到方法。请帮忙。

例如:

Jackson

在上面的代码中,如果回声端点被有效载荷击中

enter image description here

则响应为

enter image description here

在这种情况下,有可能引发自定义异常或自定义消息

1 个答案:

答案 0 :(得分:0)

为此,您需要注册DeserializationProblemHandler

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.addHandler(new DeserializationProblemHandler() {
    @Override
    public Object handleWeirdStringValue(DeserializationContext ctxt, Class<?> targetType, String valueToConvert, String failureMsg) throws IOException {
        System.out.println("Handle parse problem for value = " + valueToConvert);
        throw new CanNotParseJsonException("Can not deserialise " + valueToConvert, null);
    }
});

在其他情况下,您的异常应扩展JsonMappingException并将其包装。示例异常:

class CanNotParseJsonException extends JsonMappingException {

    public CanNotParseJsonException(String msg, Throwable problem) {
        super(null, msg, problem);
    }
}

请参阅:

  1. Configure a Jackson's DeserializationProblemHandler in Spring environment
  2. Can't set ProblemHandler to ObjectMapper in Spring Boot
  3. Java Source