Jackson - Java bean到JSON字符串:大写变量在JSON中转换为小写 [英] Jackson - Java bean to JSON string : uppercase variable converted into lowercase in JSON

查看:1306
本文介绍了Jackson - Java bean到JSON字符串:大写变量在JSON中转换为小写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am converting Java bean to JSON string using writeValueAsString method of ObjectMapper where uppercase variables from Java bean is being changed to lowercase in JSON string. Jackson 2.7.4 version implemented. Base bean sample -

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&用于Java bean到JSON转换的JSONSerializer。并且生成的JSON字符串具有与我们使用Java bean类似的命名。由于性能问题,我想改变这个&实现Jackson。

Earlier, we were using net.sf.json.JSON & JSONSerializer for Java bean to JSON conversion. And generated JSON string was having similar naming as what we are having Java bean. Due to performance issue, I want to change this & implement Jackson.

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

Restrictions : we can't change Java bean naming convention as these beans are from older project and there is little scope to change the variable names in bean and even adding json properties in each bean.

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

I have tried below code but that didn't worked

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

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

Also, I have tried customized PropertyNamingStrategy but not clear on this.

已编辑:

net.sf.json.JSON 生成的JSON字符串如上所述以上bean:

net.sf.json.JSON generated JSON string as mentioned below for above bean :

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

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

Jackson generated JSON string as mentioned below for above bean :

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

你可以看到杰克逊的XId转换为xid,杰克逊的PNRNumber转换为pnrnumber。

As you can see that "XId" converted to "xid" in jackson and "PNRNumber" converted to "pnrnumber" in jackson.

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

Is there any configuration changes available in Jackson to avoid such modification. OR How to handle such scenario.

推荐答案

以下使用了罐子:



  1. jackson-core-2.7.4.jar

  2. jackson-annotations-2.7.4.jar

  3. jackson-databind-2.7.4.jar


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

Step 1: Please write following Mixin as follows:

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步:请按以下方式编写模块: -

Step 2: Please write your Module as follows:-

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作为如下:

Step 3: Now its time to get json String as follows:

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}]}

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

希望这有帮助。

这篇关于Jackson - Java bean到JSON字符串:大写变量在JSON中转换为小写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆