我正在使用ObjectMapper的writeValueAsString方法将Java bean转换为JSON字符串,其中来自Java bean的大写变量在JSON字符串中被更改为小写。 杰克逊2.7.4版本实施。 基豆样本 -
public class BaseBean {
private static final long serialVersionUID = 3947489072259877540L;
private int _iXId;
private String _sPNR;
private ArrayList _alMinPriced = new ArrayList<TermBean>();
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&amp;用于Java bean到JSON转换的JSONSerializer。并且生成的JSON字符串具有与我们使用Java bean类似的命名。由于性能问题,我想改变这个&amp;实施杰克逊。
限制:我们无法更改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 生成的JSON字符串,如下面针对上面的bean所述:
{"XId":11,"PNRNumber":"123456789","minPriced":[{"name":"JSON"},{"name":"simple"}]}
杰克逊为上面的bean生成了JSON字符串:
{"xid":11,"pnrnumber":"123456789","minPriced":[{"name":"JSON"},{"name":"Jackson"}]}
你可以看到&#34; XId&#34;转换为&#34; xid&#34;在杰克逊和&#34; PNRNumber&#34;转换为&#34; pnrnumber&#34;在杰克逊。
杰克逊是否有任何配置更改可以避免此类修改。 或者如何处理这种情况。
答案 0 :(得分:4)
使用了以下罐子:
- 杰克逊 - 芯 - 2.7.4.jar
- 杰克逊 - 注解-2.7.4.jar
- 杰克逊 - 数据绑定-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”:[{ “名称”: “JSON”},{ “名称”: “简单”}]}
希望这有帮助。
答案 1 :(得分:1)
添加带有必需键箱的Json属性。用小写字母创建变量。
public class BaseBean {
@JsonProperty("XId")
private int xId;
..
}
希望这会有所帮助