java - 如何在没有任何注释的 Spring 项目中使用 Jackson Json 解析?

标签 java json spring spring-mvc jackson

情况

我有一个名为 Errors 的枚举类,它位于一个公共(public)项目中。错误枚举包含一个 int 代码和一个 String 文本。 Errors 枚举用于两个不同的项目。一个项目是基于 Spring 的项目,另一个项目是非 Spring J2EE 应用程序。

在基于 Spring 的项目中,Jackson 是用于将 Errors 枚举转换为 Json 的库。因此,如果有请求,我们可以返回一个 Errors 枚举对象,它会自动转换为 json 表示形式,即 {code: int, text: error}错误枚举具有注释:

@JsonSerialize(using=ErrorsSerializer.class)

ErrorsSerializer 类位于基于 Spring 的应用程序中。

在 Errors 枚举所在的公共(public)项目中,Gson 是用于将对象转换为其 Json 表示形式的库,我们希望删除对 Jackson 库的任何引用。

问题

如果我从 Errors 枚举中删除注释,Spring 项目将不会返回 Errors 枚举的正确表示,它只会返回引号中的常量变量。

问题

如何删除 Errors 枚举的注释(这将删除公共(public)项目中的任何 Jackson 依赖项),同时仍然让 Spring 项目返回正确的 Json 表示形式?

迄今为止最好的选择

到目前为止,我想到的最佳选择是在 Spring 应用程序中创建一个 Errors 容器对象,其中包含 Errors 枚举,并且还具有 json 序列化注释。

谢谢!

最佳答案

您还可以使用Module功能在基于Spring的项目中指定序列化器。 Module 允许用户自定义没有注释的 ObjectMapper 对象。请参阅下面的示例:

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;

public class JacksonProgram {

    public static void main(String[] args) throws Exception {
        SimpleModule module = new SimpleModule();
        module.addSerializer(Error.class, new ErrorJsonSerializer());

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(module);

        System.out.println(mapper.writeValueAsString(Error.NOT_FOUND));
    }
}

以上示例打印:

{"code":1,"text":"Not found"}

请参阅以下链接以查找如何在 Spring 应用程序中配置 ObjectMapper 的解决方案:

关于java - 如何在没有任何注释的 Spring 项目中使用 Jackson Json 解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104435/

相关文章:

java - 如何对每个项目进行迭代和执行一些任意操作?

java - 如何从 Java 应用程序调用 GraphQL 端点

java - 将 JSON 解析为 java 类

java - hibernate - 防止获取某些属性

java - 在我进入另一个分支并返回后,我看不到在 git 分支中所做的文件更改

java - JDBC 调用触发的 sun.misc.Unsafe.park

json - 在 Swift 中解析 JSON 时为 nil

java - 从 php JSON 对象创建 JSON 数组时出现问题

java - 无法连接到 websocket 服务器(spring)

xml - spring servlet xml 顶部的声明是什么意思?