我一直在寻找自定义< code > Jackson bind on < code > GAE 抛出的异常的方法。
问题是当我发送一个字符串参数,其中API
方法期望Integer
抛出一个Jackson
的InvalidFormatException
。我想自定义异常抛出的消息,但我找不到方法。请帮助解决这个问题。
例如:
@Api(
name = "echo",
version = "v1",
namespace =
@ApiNamespace(
ownerDomain = "echo.example.com",
ownerName = "echo.example.com",
packagePath = ""
),
issuers = {
@ApiIssuer(
name = "firebase",
issuer = "https://securetoken.google.com/YOUR-PROJECT-ID",
jwksUri =
"https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system"
+ ".gserviceaccount.com"
)
})
public class Echo {
@ApiMethod(name = "echo")
public Message echo(Message message, @Named("n") @Nullable Integer n) {
return doEcho(message, n);
}
}
在上面的代码中,如果有效负载命中了回送endpoint
那么响应是
在这种情况下,是否可以抛出自定义异常或自定义消息
为此,您需要注册<code>DeserializationProblemHandler</code>
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);
}
});
您的异常应该扩展< code > JsonMappingException ,否则它将被包装。例外示例:
class CanNotParseJsonException extends JsonMappingException {
public CanNotParseJsonException(String msg, Throwable problem) {
super(null, msg, problem);
}
}
参见: