赞
踩
通常我们java类里的字段的命名都是按照驼峰规则来的,但是有些不按套路的或者命名不规范的人,就会出现各种奇葩的情况。最近在项目上就遇到了奇葩的几种情况,一种是类似create_user_id,另一种是PODocNo,还有TotalWeight等。
由于我们是下游系统,要接收上游传过来的数据,正常情况我们都会按照驼峰规则去建立字段,然后使用JSONObject.parseObject(json,类名.class);方法处理,既简单又方便,但是本 人却遇到了奇葩的人写的代码,没有一点代码规范性,接收到的报文字段上面三种形式的都有,本人又是那种对代码规范有强迫症的人,不喜欢在类中对字段随意命名。
接收报文格式例子
String json = "{\"create_user_id\":\"12\",\"SuplierCode\":\"3-9989965\",\"POLine\":\"11122\"}";
处理类:
- private String createUserId;
-
- private String suplierCode;
-
- private String PoLine;
-
- public String getSuplierCode() {
- return suplierCode;
- }
-
- public void setSuplierCode(String suplierCode) {
- this.suplierCode = suplierCode;
- }
-
- public String getCreateUserId() {
- return createUserId;
- }
-
- public void setCreateUserId(String createUserId) {
- this.createUserId = createUserId;
- }
-
- public String getPoLine() {
- return PoLine;
- }
-
- public void setPoLine(String poLine) {
- PoLine = poLine;
- }
按照常规方法处理查看结果有些字段赋值没成功
好在fastjson提供了@JSONField(name="xxxx"),可以作用在字段上,按照自己的方式给字段写对应的名称,
看一下这个注解代码
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
- public @interface JSONField {
-
- String name() default "";
-
- String format() default "";
-
- boolean serialize() default true;
-
- boolean deserialize() default true;
-
- SerializerFeature[] serialzeFeatures() default {};
-
- Feature[] parseFeatures() default {};
- }
json在解析过程中会判断有无使用该注解进行解析重命名
所以需要在我们字段上加上@JSONField注解,
- @JSONField(name="create_user_id")
- private String createUserId;
-
- @JSONField(name="SuplierCode")
- private String suplierCode;
-
- @JSONField(name="POLine")
- private String PoLine;
-
- public String getSuplierCode() {
- return suplierCode;
- }
-
- public void setSuplierCode(String suplierCode) {
- this.suplierCode = suplierCode;
- }
-
- public String getCreateUserId() {
- return createUserId;
- }
-
- public void setCreateUserId(String createUserId) {
- this.createUserId = createUserId;
- }
-
- public String getPoLine() {
- return PoLine;
- }
-
- public void setPoLine(String poLine) {
- PoLine = poLine;
- }
在查看结果,都赋到值了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。