将参数传递给JsonSerialize

时间:2016-09-22 07:54:07

标签: java jackson

我有一个发送JSON的休息服务。在发送之前,我想更改一个字段,例如将n添加到价格中。 n是一个参数,来自客户端。如果没有AOP和反射,我如何将n传递给JsonSerializer

1 个答案:

答案 0 :(得分:0)

您可以使用SimpleModule。 创建SimpleModule并手动创建Serializer对象并将参数传递给构造函数。 这是示例

假设我们有User模型类,如:

 package com;

public class User {

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getNumber() {
    return number;
}
public void setNumber(int number) {
    this.number = number;
}
private String name;
private int number;

}

这是自定义的Serializer类,如:

package com;


public class UserSerializer extends JsonSerializer<User>{
    private String n;

public UserSerializer(String n){
    this.n = n;
}
@Override
public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
    if(user != null){
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("name", "Hello, "+user.getName()+" : value of n : "+n);
        jsonGenerator.writeEndObject();
    }
}

}

这是你的主要课程:

public class Application {
public static void main(String[] args) throws Exception{
    User user = new User();
    user.setName("nitin");
    String n = "1111";  //this value comes from API
    SimpleModule module = new SimpleModule();
    module.addSerializer(User.class, new UserSerializer(n));

    XmlMapper xmlMapper = new XmlMapper();
    xmlMapper.registerModule(module);

    String xml = xmlMapper.writeValueAsString(user);
    System.out.println(xml);
}

}

你的出局应该是:

<User1 xmlns=""><name>Hello, nitin : value of n : 1111</name></User1>

如果您想在json中输出,请使用ObjectMapper