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

2023-12-28

情况

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

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

@JsonSerialize(using=ErrorsSerializer.class)

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

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

问题

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

问题

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

迄今为止最好的选择

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

Thanks!


您还可以在基于 Spring 的项目中使用指定序列化器Module功能。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"}

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

  • 使用 Spring Javaconfig 注册自定义 Jackson ObjectMapper http://www.jworks.nl/2013/08/21/register-a-custom-jackson-objectmapper-using-spring-javaconfig/.
  • 在 Spring 中配置 ObjectMapper https://stackoverflow.com/questions/7854030/configurating-objectmapper-in-spring.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有任何注释的 Spring 项目中使用 Jackson Json 解析? 的相关文章

随机推荐