Jackson – Java bean到JSON字符串:大写变量在JSON中转换为小写

我正在使用ObjectMapper的writeValueAsString方法将Java bean转换为JSON字符串,其中来自Java bean的大写变量在JSON字符串中被更改为小写。 jackson2.7.4版本实施。 基豆样品 –

public class BaseBean { private static final long serialVersionUID = 3947489072259877540L; private int _iXId; private String _sPNR; private ArrayList _alMinPriced = new ArrayList(); public int getXId() { return _iXId; } public void setXId(int id) { _iXId = id; } public String getPNRNumber() { return _sPNR; } public void setPNRNumber(String _spnr) { _sPNR = _spnr; } public ArrayList getMinPriced() { return _alMinPriced; } public void setMinPriced(ArrayList minPriced) { _alMinPriced = minPriced; } public void setMinPriced(TermBean bnTerm) { _alMinPriced.add(bnTerm); } 

}

之前,我们使用net.sf.json.JSON和JSONSerializer进行Java bean到JSON的转换。 并且生成的JSON字符串具有与我们使用Java bean类似的命名。 由于性能问题,我想改变这一点并实施jackson。

限制:我们不能更改Java bean命名约定,因为这些bean来自较旧的项目,并且几乎没有空间来更改bean中的变量名,甚至在每个bean中添加json属性。

我试过下面的代码但是没有用

 ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); mapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE); 

此外,我尝试过定制的PropertyNamingStrategy,但不清楚这一点。

编辑:

net.sf.json.JSON为上面的bean生成了如下所述的JSON字符串:

 {"XId":11,"PNRNumber":"123456789","minPriced":[{"name":"JSON"},{"name":"simple"}]} 

jackson为上面的bean生成了如下所述的JSON字符串:

 {"xid":11,"pnrnumber":"123456789","minPriced":[{"name":"JSON"},{"name":"Jackson"}]} 

正如你所看到的那样,“XId”在jackson中转换为“xid”,而“PNRNumber”在jackson中转换为“pnrnumber”。

jackson是否有任何配置更改可以避免此类修改。 或者如何处理这种情况。

以下jar子已被使用:

  1. jackson核心2.7.4.jar
  2. jackson的注解 – 2.7.4.jar
  3. jackson – 数据绑定 – 2.7.4.jar

第1步:请按以下方式编写以下Mixin:

 import java.util.ArrayList; import com.fasterxml.jackson.annotation.JsonProperty; public abstract class MixIn { @JsonProperty("PNRNumber") abstract String getPNRNumber(); @JsonProperty("XId") abstract int getXId(); @JsonProperty("minPriced") abstract ArrayList getMinPriced(); } 

第2步:请按以下方式编写您的模块: –

 import com.fasterxml.jackson.databind.module.SimpleModule; public class MyModule extends SimpleModule{ public MyModule() { super("ModuleName"); } @Override public void setupModule(SetupContext context){ context.setMixInAnnotations(BaseBean.class, MixIn.class); } } 

第3步:现在是时候获取json String如下:

 TermBean bean1=new TermBean("JSON"); TermBean bean2=new TermBean("simple"); ArrayList list=new ArrayList(); list.add(bean1); list.add(bean2); BaseBean bb=new BaseBean(); bb.setXId(11); bb.setPNRNumber("123456789"); bb.setMinPriced(list); ObjectMapper mapper = new ObjectMapper(); Module myModule = new MyModule(); mapper.registerModule(myModule); String jsonInString = mapper.writeValueAsString(bb); System.out.printf( "JSON: %s", jsonInString ); 

输出:

JSON:{“XId”:11,“PNRNumber”:“123456789”,“minPriced”:[{“name”:“JSON”},{“name”:“simple”}]}

希望这可以帮助。

使用所需的keycase添加Json Property。 用小写创建变量。

 public class BaseBean { @JsonProperty("XId") private int xId; .. } 

希望这会有所帮助