【发布时间】:2012-11-10 07:44:52
【问题描述】:
要求 我正在构建一个 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 中声明为 bean。对于 /format,我使用带有自定义序列化程序的 FormatOM,在 /raw 中我使用 RawOM。
问题 它不像我预期的那样工作。我希望当我通过 /format 调用发出请求时,将使用 FormatOM 并使用 /raw RawOM。发生的事情是无论我首先拨打哪个电话,后续电话都使用相同的 ObjectMapper。因此,如果第一个调用是 /raw;随后对 /format 或 /raw 的调用呈现原始 JSON 输出。 Tomcat 重新启动后,如果第一次调用是 /format,那么随后对任一 API 调用的调用都会呈现格式化的 JSON 输出
问题 1.你如何实现我的渲染格式化+原始JSON的要求 输出? 2. 我的实现有什么问题? 3. 有什么想法、建议或批评吗? 4. 还有其他方法可以拥有基于请求的映射器吗?
谢谢
【问题讨论】:
-
只是在玩代码,我将尝试自动装配 JacksonJsonProvider 并根据请求注入映射器。如果它对我有用,会报告。
标签: java spring cxf jackson jax-rs