【问题标题】:Can i pass a parameter to jackson custom serializer我可以将参数传递给杰克逊自定义序列化程序吗
【发布时间】:2017-09-05 18:00:54
【问题描述】:

我正在创建一个数字网络服务。其中许多返回的对象包含作为代码存储在数据库表中的属性。这些代码存储在一个表中,其中为选择列表值指定了一个类型。当这些代码出现在普通桌面应用程序上时,JSP 将这些代码转换为用户友好的代码描述。 我需要将通常在 JSP 中转换的任何代码转换为一组格式,代码和描述之间用 | 分隔。在返回响应之前。 我认为编写一个可以执行此操作的杰克逊自定义序列化程序类是个好主意。然后我可以注释任何方法@JsonSerialize,返回一个代码,使用这个自定义类进行序列化。问题是我需要将代码类型传递给自定义序列化程序类以了解要搜索的代码。所以基本上我需要在我的@JsonSerialize 注释中传递一个参数,但由于我认为这是不可能的,所以对解决方法有任何想法。 我的自定义序列化器看起来像这样......(我需要以某种方式将类型传递给这个类)

@Component
public class MaintCodeSerializer extends JsonSerializer<String> {

  @Autowired
  private MaintCodeService maintCodeService;
  public MaintCodeSerializer(){
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);    
  }
  @Override
  public void serialize(String code, JsonGenerator jgen, SerializerProvider prov)
  throws IOException, JsonProcessingException {
    MaintCodeVO maintCode = maintCodeService.retrieveMaintCode(type, code);
    jgen.writeString(maintCode.getCodeAndDescResponse());
  }

}   

pojo getter 看起来像这样......

@JsonSerialize(using=MaintCodeSerializer.class)
  public String getIntelCategory()
  {
     return intelCategory;
  }

【问题讨论】:

    标签: json serialization jackson


    【解决方案1】:

    你必须创建一个 BeanSerializerModifier。

    首先,您必须根据自己的需要创建一个注释。然后您创建一个 BeanSerializerModifier,覆盖“changeProperties”方法,该方法创建正确的 JsonSerializer,您可以将注解的参数传递给序列化器的构造函数。

    最后一步,通过向 ObjectMapper 添加一个新模块来注册您的 BeanSerializerModifier。

    【讨论】:

      猜你喜欢
      • 2016-02-19
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2017-06-16
      • 2012-05-29
      • 2014-01-31
      相关资源
      最近更新 更多