java - 在 GAE 标准上自定义 jackson bind 抛出的异常
问题描述
我一直在寻找一种方法来自定义Jackson
bind on引发的异常GAE
。
问题是当我发送一个字符串参数时,API
方法期望Integer
抛出一个Jackson
's 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);
}
}
在上面的代码中,如果 echo 端点被有效载荷命中
那么响应是
在这种情况下是否可以抛出自定义异常或自定义消息
解决方案
为此,您需要注册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);
}
}
看:
推荐阅读
- reactjs - 在 getServerSideProps 中未检测到 NextJS cookie 令牌
- java - Spring Boot - 将 JaCoCo 覆盖托管为静态 HTML
- python - 从 Pandas 数据框中提取唯一的连续值
- python - For 循环遍历文件夹中的多个文件
- vertica - 如何在 Vertica SQL 中获取昨天的日期从 00:00:00 开始
- c# - 从 Random.Range 中排除值
- angular - Angular 不能将异步管道与我的 observable 一起使用
- angular - 为 HTML 文件配置 Prettier
- c# - 如何使用 .net 核心中的 C# mongo Db 驱动程序将多个文档组合/合并到一个 c# 对象
- sql - postgres 访问视图内的 cte