java - 我应该为 Servlet 的所有 doGet/doPost 调用实例化一个共享 Gson 对象吗?

标签 java servlets gson

目前,我正在使用 Google 的 Gson 类将传入的 Ajax JSON 字符串解析为 Java pojo,作为 doGet/doPost 任务的一部分。我按照通常的方式从 JSON 字符串中实例化一个新的 Gson 对象:

JsonObj jsonObj = new Gson().fromJson(jsonStr, jsonObj.class);

问题是我是否应该在 servlet 初始化中实例化一个共享 gson 对象,以避免在每个 servlet doGet/doPost 调用中执行 new Gson()

这里Instantiate a new instance of GSON for every serialization?我了解到 Gson 不是单例,并且可以使用 GsonBuilder 进行一些自定义,但这不是我的情况。 我担心共享 Gson 对象的多线程行为。

最佳答案

简单答案:Gson 是线程安全的,您可以在 servlet 之间共享它。请参阅:Is it OK to use Gson instance as a static field in a model bean (reuse)?

但是您应该将 JSON 序列化/反序列化逻辑与业务逻辑分离。例如,在Spring中由 *HttpMessageConverter 完成层。因此,第一步是创建 Gson 对象的共享 bean,第二步是创建抽象层,允许在需要时交换实现。如果您无论如何都在编写 web-appSpring 是一个不错的选择。

关于java - 我应该为 Servlet 的所有 doGet/doPost 调用实例化一个共享 Gson 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56376047/

相关文章:

java - Java中@notnull注解在2013年是什么情况?

java - jersey 2.6 jackson 2.3 和 map 中的复杂键

java - Gson反序列化通用类型适配器的基类

java - 我无法使用 Gson 将 Json 文件解析为 java 对象

java - 是否可以将javascript值分配给html并使用Jsp获取该值?

java - GSON 序列化未返回正确的 json 字符串

java - 在 CMD 中运行 Java 程序时遇到问题

java - 动态类型转换

java - 如何在UART(atmega16)编码中添加AT命令以向手机发送短信?

java - Jersey 2 servlet 404 问题