java - 如何通过 CXF、Spring 和 Jackson 使用多个 JSON 提供程序

标签 java spring cxf jackson jax-rs

要求 我正在构建一个 REST API。它有两个 REST 调用。调用/format 根据提供的参数输出格式化的 JSON。具有相同参数的调用/raw 应输出带有原始值的 JSON(不带格式)。这里的格式将是特定于区域设置的,例如日期更改、显示值的正确货币、小数格式、时间格式等。

工具 Java、Tomcat、Spring、Apache CXF、JAX-RS 和 Jackson。

实现 REST 服务已设置并且工作正常。那里没有问题。我编写了单独的自定义序列化程序,其中使用 NumberFormat、DateFormat、DecimalFormat 等提供所需的格式。我扩展了 Jackson 的 SimpleModule 来注册上面提到的所有自定义序列化程序。我正在使用两个单独的 ObjectMapper(FomatOM 和 RawOM)。FormatOM 注册用于格式化 JSON 输出的自定义模块,RawOM 根据要求用于原始 JSON 输出。这两个对象映射器注册到两个不同的 JacksonJsonProviders 并在我的 spring 配置 xml 中声明为 beans。对于/format,我使用 FormatOM 和自定义序列化器,在/raw 中我使用 RawOM。

问题 它没有像我预期的那样工作。我预计当我通过/format 调用发出请求时,将使用 FormatOM,并且将使用/raw RawOM。发生的情况是,无论我首先进行哪个调用,后续调用都将使用相同的 ObjectMapper 进行服务。因此,如果第一个调用是/raw;对/format 或/raw 的后续调用呈现原始 JSON 输出。 Tomcat 重新启动后,如果第一个调用是/format,则对任一 API 调用的后续调用将呈现格式化的 JSON 输出

问题 1.如何实现我的渲染格式化+原始JSON的要求 输出? 2.我的实现有什么问题吗? 3. 有什么想法、建议或批评吗? 4.还有其他方法可以拥有基于请求的映射器吗?

谢谢

最佳答案

一种解决方法是使用StreamingOutput,并在其中捆绑特定的ObjectMapper,直接使用它(ObjectMapper.writeValue(output, value) ;)

关于java - 如何通过 CXF、Spring 和 Jackson 使用多个 JSON 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13503742/

相关文章:

java - 使用 RestTemplate 获取模型对象

java - 使用 Scanner 提示用户输入

Java - Spring REST - 更多参数

java - recyclerview 中的列表未排序

ssl - 使用某些 JDK 重置 Java TLS 连接

spring - Tomcat 或 Spring Suite Tool 的默认服务器不在 Simple Spring Web Maven 项目中运行

java - 如何在 Spring MVC 项目中有效地使用 Scala?

web-services - 由于 : No component found with scheme: activemq 导致创建路由失败

java - minOccurs 和 maxOccurs

java - 使用基本身份验证和 ssl 调用 soap ws 时出错