您可以使用
PropertyNamingStrategyclass覆盖class属性。查看此类的简单实现:
class ReplaceNamingStrategy extends PropertyNamingStrategy { private static final long serialVersionUID = 1L; private Map<String, String> replaceMap; public ReplaceNamingStrategy(Map<String, String> replaceMap) { this.replaceMap = replaceMap; } @Override public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) { if (replaceMap.containsKey(defaultName)) { return replaceMap.get(defaultName); } return super.nameForGetterMethod(config, method, defaultName); }}示例程序如下所示:
import java.io.IOException;import java.util.Collections;import java.util.Map;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.PropertyNamingStrategy;import com.fasterxml.jackson.databind.cfg.MapperConfig;import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;public class JacksonProgram { public static void main(String[] args) throws IOException { Msg msg = new Msg(); msg.setCode(42); msg.setData("Are you suggesting coconuts migrate?"); System.out.println(convert(msg, "test")); System.out.println(convert(msg, "toto")); System.out.println(convert(msg, "groovy")); } public static String convert(Msg msg, String name) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(new ReplaceNamingStrategy(Collections.singletonMap("data", name))); return mapper.writevalueAsString(msg); }}上面的程序打印:
{"pre":42,"test":"Are you suggesting coconuts migrate?"}{"pre":42,"toto":"Are you suggesting coconuts migrate?"}{"pre":42,"groovy":"Are you suggesting coconuts migrate?"}


