我们正在使用 Spring Integration 处理传递到 RESTful 端点的 JSON 有效负载。作为此流程的一部分,我们使用过滤器来验证 JSON:
.filter(schemaValidationFilter, s -> s
.discardFlow(f -> f
.handle(message -> {
throw new SchemaValidationException(message);
}))
)
这很好用。但是,如果验证失败,我们希望捕获解析错误并将其返回给用户,以便他们可以对错误采取行动。这是SchemaValidationFilter 类中重写的接受方法:
@Override
public boolean accept(Message<?> message) {
Assert.notNull(message);
Assert.isTrue(message.getHeaders().containsKey(TYPE_NAME));
String historyType = (String)message.getHeaders().get(TYPE_NAME);
JSONObject payload = (JSONObject) message.getPayload();
String jsonString = payload.toJSONString();
try {
ProcessingReport report = schemaValidator.validate(historyType, payload);
return report.isSuccess();
} catch (IOException | ProcessingException e) {
throw new MessagingException(message, e);
}
}
我们所做的是在 catch 块中抛出一个 MessageException 似乎可以解决问题。然而,这似乎打破了过滤器应该做的事情(简单地返回一个真或假)。
是否有将错误详细信息从过滤器传递给客户端的最佳实践?过滤器是这个用例的正确解决方案吗?
谢谢你的帮助!约翰