背景
java利用fastjson-1.2.62.jar和mongo-java-driver-3.12.3.jar库保存数据到mongodb数据库时,会意外多出一些小写字母开头的字段。如下图所示:
红色部分就是多出的字段,不是我想要的。
实际上我的结构体定义如下,没有写get、set等方法,而是用lombok注解的方式:
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Data
@Setter
@Getter
public class MongoJson {
public String URI;
public String Status;
public String Type;
public Long UpdateTime;
public String CollectContent;
}
为什么会多出现如此奇怪的问题那?
因为,java语言通常采用驼峰命名法,所以,咋调用JSON.toString(obj)转为json字符串时会将返回值中自动将首字母变小写。
解决方法
修改实体类,在属性上方添加如下内容:
@JSONField(name = “xxx”)
,xxx就是需要最终输出的key值
具体修改如下:
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Data
@Setter
@Getter
public class MongoJson {
@JSONField(name = "URI")
public String URI;
@JSONField(name = "Status")
public String Status;
@JSONField(name = "Type")
public String Type;
@JSONField(name = "UpdateTime")
public Long UpdateTime;
@JSONField(name = "CollectContent")
public String CollectContent;
}
再次,查看数据库内容,已经没有多余字段了,如下图所示:
如果没用lombok,而用get、set等原始方法,只需要在get方法上面添加如上语句即可,如下所示:
public class MongoJson {
public String URI;
public String Status;
public String Type;
public Long UpdateTime;
public String CollectContent;
}
@JSONField(name = "URI")
public String getURI() {
return URI;
}
@JSONField(name = "Status")
public String getStatus() {
return Status;
}
@JSONField(name = "Type")
public String getType() {
return Type;
}
@JSONField(name = "UpdateTime")
public Long getUpdateTime() {
return UpdateTime;
}
@JSONField(name = "CollectContent")
public String getCollectContent() {
return CollectContent;
}
//省略set方法
结果一样。
参考:
https://blog.csdn.net/imVainiycos/article/details/123019027