我正在创建一些网络服务。其中许多返回包含作为代码存储在数据库表中的属性的对象。这些代码存储在一个表中,其中选择列表值被赋予类型。当这些代码出现在普通桌面应用程序上时,JSP会将这些代码转换为用户友好的代码描述。 我需要将通常在JSP中转换的任何代码转换为集合格式,代码和描述用|分隔在返回响应之前。 我认为编写一个可以执行此操作的jackson自定义序列化程序类是个好主意。然后我可以注释任何方法@JsonSerialize,返回一个代码,使用这个自定义类进行序列化。问题是我需要将代码类型传递给自定义序列化程序类以了解要搜索的代码。所以基本上我需要在我的@JsonSerialize注释中传递一个参数,但因为我认为这不可行,所以对于解决方法的任何想法。 我的自定义序列化程序看起来像这样......(我需要以某种方式将类型传递给此类)
$result = str_replace($numberToRemove, '', $string);
pojo getter看起来像这样......
@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());
}
}
答案 0 :(得分:0)
您必须创建BeanSerializerModifier。
首先,您必须根据自己的需要创建一个注释。然后创建一个BeanSerializerModifier,覆盖“changeProperties”方法,该方法创建正确的JsonSerializer,您可以将注释的参数传递给序列化程序的构造函数。
最后一步,通过向ObjectMapper添加一个新模块来注册BeanSerializerModifier。