2016-09-22 241 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