2016-09-22 386 views
2

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

回答

0

你可以用SimpleModule做。 创建SimpleModule并手动创建Serializer对象并将参数传递给构造函数。 这里是例子

让我们说,我们有用户模型类,如:

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; 

}

这是自定义的序列化器类,如:

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