Java XML和JSON中的RESTful API—请求验证的最佳方法?

Java XML和JSON中的RESTful API—请求验证的最佳方法?,java,xml,json,api,rest,Java,Xml,Json,Api,Rest,有人有开发和维护支持XML和JSON的API的经验吗?我正在寻找一些关于如何为XML和JSON实现请求验证的线索 背景: 我们有一个基于java的应用程序公开RESTfulAPI。它接受xml请求,这些请求根据xml模式进行验证,然后使用JAXB将其解组为DTO对象。 所有这些都很好地工作,但最近我们也需要支持JSON 现在,我们可以继续根据xml模式验证xml,并将json模式用于json。json模式规范()仍然是一个草稿(并且已经过期!),但是已经有了一些相当成熟的java实现:。 明显的

有人有开发和维护支持XML和JSON的API的经验吗?我正在寻找一些关于如何为XML和JSON实现请求验证的线索

背景: 我们有一个基于java的应用程序公开RESTfulAPI。它接受xml请求,这些请求根据xml模式进行验证,然后使用JAXB将其解组为DTO对象。 所有这些都很好地工作,但最近我们也需要支持JSON

现在,我们可以继续根据xml模式验证xml,并将json模式用于json。json模式规范()仍然是一个草稿(并且已经过期!),但是已经有了一些相当成熟的java实现:。 明显的缺点是我们不得不维护两个模式(xsd和json模式),这有点麻烦

另一个选项是首先将请求解组/反序列化到dto,并在带注释的dto类上使用类似hibernate validator的东西。这样做的好处是,我们可以在一个地方对xml和json使用相同的验证规则。但是,验证的健壮性/可靠性较差,因为我们会在检查请求之前创建对象

目前,我倾向于选择选项1,牺牲可维护性来换取健壮性

还有其他可能的解决办法吗


非常感谢。

您为什么不使用像Jackson这样可以序列化为两种格式的工具?问题不在于序列化。它已经实现了,并且运行得很好。实际上,我确实使用jackson进行json序列化(它非常支持JAXB注释)。然而,我正在寻找一些合理的验证方法。啊,我明白了。读得太快了。问题是在解组之前或之后何时进行验证。我想我看不出第二条有什么坏处。验证DTO而不是JSON/XML如何影响健壮性/可靠性?您正在创建一个廉价对象,然后要么立即将其丢弃,要么将其用于请求的其余部分。我认为您面临着架构不同步的重大风险。我认为没有任何其他解决方案-您必须进行验证,可以在解组之前或之后进行验证。我猜创建包含未经验证的用户提供输入的对象总是有风险的。例如,它可能使应用程序更容易受到DoS攻击。例如,有人会开始创建包含巨大值的请求,这些值可能会导致溢出或内存泄漏。当然,除非您反序列化到流中并在流输出时进行验证,否则您仍然会将这些巨大值放入内存中。