为 Google App Engine 配置 Jackson

2024-02-19

有什么办法可以配置吗Jackson (配置对象映射器)哪个用于序列化 servlet 响应?

@Api(name = "rates",
        version = "v1",
        title = "Rates API")
public class RatesApi {
    static Logger LOG = Logger.getLogger(RatesApi.class.getSimpleName());

    @ApiMethod(name = "getLatestRates",
            path = "latest",
            httpMethod = HttpMethod.GET)
    public RatesEnvelope getLatestRates(@Named("base") String base) throws BadRequestException,
            InternalServerErrorException {

        try {
            RatesInfo ratesInfo = DatabaseUtils.getLatestRates(base);
            return new RatesEnvelope(ratesInfo.getDate(), base, ratesInfo.getTimestamp(), ratesInfo.getRates());
        } catch (IllegalArgumentException e) {
            throw new BadRequestException(e.getMessage());
        } catch (com.googlecode.objectify.NotFoundException e) {
            throw new InternalServerErrorException("no available rates");
        }
    }
}

我的问题是 RatesEnvelope 类包含 BigDecimal 字段,应配置为mapper.enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN);以避免 E 表示法。

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>CurrencyWebserviceServlet</servlet-name>
        <servlet-class>PACKAGE_NAME.backend.servlet.OpenExchangeRatesWebserviceServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>PACKAGE_NAME.backend.spi.RatesApi</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>CurrencyWebserviceServlet</servlet-name>
        <url-pattern>/cron/fetchlatest</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>all</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    <filter>
        <filter-name>ObjectifyFilter</filter-name>
        <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <!-- Next three lines are for request dispatcher actions -->
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
</web-app>

创建 Jackson ObjectMapper 的实例。通过启用或禁用您需要的功能来根据需要进行配置。修改您的 Spring 配置以使用它而不是默认配置。 Java 配置看起来像这样:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    final ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN);
    converter.setObjectMapper(objectMapper);
    converters.add(converter);
    super.configureMessageConverters(converters);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Google App Engine 配置 Jackson 的相关文章

随机推荐

  • ALSA 记录 - 了解内存映射

    我尝试使用 ALSA 从 USB 音频设备获取输入并将其作为一系列内容写入磁盘signed short价值观 我最终得到的是看似有效的数据块 其中散布着大块的零 我猜测我的缓冲区设置不正确并且没有正确使用内存映射 我正在尝试什么 采样率 8
  • Autofac 注册程序集类型

    在 Castle 中 我曾经执行以下操作来注册来自不同程序集的类型 Classes FromAssemblyNamed MyServer DAL Where type gt type Name EndsWith Repository Wit
  • 重叠绝对定位的内容

    我遇到了一些困难这一页 http louiswalch com beta t urs 它几乎可以正常工作 红色框应位于窗口的中心 h v 作品 黄色框应贴在窗口底部 作品 当窗口小于 400 像素高时 应出现滚动条 并且黄色框应出现在滚动区
  • 按第二列中的时间戳合并多个日志文件

    我有同一天的多个日志文件 我想要做的是根据日志中的时间戳将它们合并为一个Perl script 日志 1 log 2014 06 02 21 54 38 805 INFO com HomeManeger Executor Thread 19
  • 我们怎么知道这是数组中的最后一个元素?

    我有以下代码 int array 5 1 0 1 0 0 int i for i 0 i lt 5 i if array i 1 printf found one n 我们怎么知道第二个1 in the array是最后一个1我们发现 我的
  • 查找每个点坐标属于哪个国家/地区[重复]

    这个问题在这里已经有答案了 我有一个带有纬度 经度坐标的数据框 head COORD LAT LON 1 69 34 16 17 2 69 20 17 92 3 69 59 17 87 4 69 17 18 52 5 69 42 18 95
  • 多选 PHP

  • 用 Spirit Qi 解析成 std​​::vector,出现段错误或断言失败

    我使用 Spirit Qi 作为解析器 将数学表达式解析为表达式树 我跟踪诸如解析时遇到的符号类型之类的事情 并且必须在我正在解析的文本中声明这些符号 也就是说 我正在解析贝尔蒂尼输入文件 http bertini nd edu Berti
  • 有 libclang 的教程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一些易于理解的 libclang 指南 我在这里或其他论坛上看到了一些帖子 但唯一推荐的信
  • 如何使用 ef core 1 在 UWP 中运行迁移

    我不知道如何使用 EntityFramework Commands 也是 v7 0 0 rc1 final 在 EntityFramework Core v7 0 0 rc1 final 中运行迁移 当我添加迁移 Add Migration
  • Actionscript 3 内省——函数名称

    我试图迭代对象的每个成员 对于每个成员 我检查它是否是一个函数 如果它是一个函数 我想获取它的名称并根据函数的名称执行一些逻辑 我不知道这是否可能 是吗 有小费吗 example var mems Object getMemberNames
  • 如何在 C# 和 DataAnnotation 中创建通用 UniqueValidationAttribute?

    我正在尝试创建一个UniqueAttribute使用System ComponentModel DataAnnotations ValidationAttribute 我希望这是通用的 因为我可以传递 Linq DataContext 表名
  • 在浏览器窗口中更改 PDF 标题

    我有一个 pdf 文件 正在为客户放在网站上 它位于这里 http www optiphysicaltherapy com dev wp content uploads 2014 02 OPTI NewPatientForms pdf ht
  • 如何更改消息框标题? [复制]

    这个问题在这里已经有答案了 如何在asp net中更改此消息框的标题 该标题出现在 IE 中 帮忙 你不能 没有 API 可以执行此操作 默认标题是反网络钓鱼安全功能 如果您希望对警报消息的外观有足够的控制 那么您必须在 DOM 中构建自己
  • CGContextDrawImage 崩溃

    代码如下 void drawLayer CALayer layer inContext CGContextRef ctx CGContextRef context ctx CGContextRetain context CGContextS
  • 应用程序的沙箱虚拟机(概念)

    我想编写一个沙箱虚拟机来执行已编译的程序 我的目标是将该程序与操作系统的其余部分隔离并控制其执行 以便它不会对主机做出任何有害的事情 我假设 执行的程序被编译为可移植可执行格式 并且是机器代码 而不是任何类型的字节代码或 CLR 执行的程序
  • 在 python 中,是否有跨平台的方法来确定哪个进程正在侦听给定端口?

    在linux下 我可以使用lsof i如以下函数所示 def FindProcessUsingPort portnum import os fp os popen lsof i s portnum lines fp readlines fp
  • Android 12 模拟器预览版无连接

    我已经安装了 Android 12 Preview 模拟器 我遇到了很多问题 因为模拟器在启动时崩溃 但在卸载并再次安装并重新启动机器等后 我设法启动它 我现在遇到的问题是互联网连接不起作用 所有其他模拟器都工作正常 我尝试从命令行启动模拟
  • Android:向EditText字段添加小数点,并使其随输入移动

    在我的应用程序中 用户可以在文本字段中输入美元金额 问题是 我需要输入在输入数字时适应最终数字 而不实际输入小数点 解释这一点的最好方法是用一个例子 假设用户从包含以下内容的 EditText 字段开始 用户想要在字段中输入 12 53 即
  • 为 Google App Engine 配置 Jackson

    有什么办法可以配置吗Jackson 配置对象映射器 哪个用于序列化 servlet 响应 Api name rates version v1 title Rates API public class RatesApi static Logg