情况
我有一个名为 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/