最后更新于2021年4月8日10:50:21
@RequestBody的使用
2021年4月7日:今天尝试把requestbody拿到的数据字段名转换为北京那边需要的字段名,由于requestbody拿到的value类型是object类型,遇到了麻烦,看到了这篇文章,先记录下再说。
2021年4月8日:搞好了,本来想写另一篇关于digest和image id的笔记的,看到了昨天写的这篇残次品,稍微完善一下好了。
需要修改的这个函数是用来模拟接收MQTT数据的,保存在MongoDB中。
这是输入的json:
{
"path": [
{
"status": "ACTIVE",
"alarm": [
{
"alarm_msg": "\u53c2\u6570\u5199\u5165\u5f00\u5173\u5904\u4e8e\u6253\u5f00",
"alarm_no": "100"
}
],
"axes": [
{
"load": "1.0",
"name": "X",
"coor": "-10.000"
},
{
"load": "0.0",
"name": "Y",
"coor": "0.000"
},
{
"load": "0.0",
"name": "Z",
"coor": "0.000"
}
],
"spindles": [
{
"load": "0.0",
"speed": 0,
"name": "S1",
"ov_spindle": 0
}
],
"ov_feed": 255,
}
],
"result": 100
}
原来
controller层我是这么写的:
public ResponseModel<String> saveCncDataMongo(@RequestBody Map<String,Object> paramMap){
...
}
@RequestBody注解会智能的将传进来的json数据转换成由ArrayList和LinkedHashMap组成的一大坨嵌套的结构。
嘿嘿,偷懒了,entity都不用自己搞了,好简单。
现在
由于现在有转换字段名称的需求,比如说把json中plural形式的"axes"转换为singular形式的"axis",我就尝试用get方法去paramMap.get(“message”),结果我发现get到的是Object类型,再往下只有Object类里面的方法了。
没有办法,只能自己手写一个entity用来接收信息了,偷懒的代价:
@Repository
@Document(collection = "cnc_data_collection")
public class CncDataWithoutMqttMongoEntity {
private static class Alarm{
private String alarm_msg;
private String alarm_no;
public void setAlarm_msg(String alarm_msg) {
this.alarm_msg = alarm_msg;
}
public void setAlarm_no(String alarm_no) {
this.alarm_no = alarm_no;
}
}
private static class Axes{
private String load;
private String name;
private String coor;
public void setLoad(String load) {
this.load = load;
}
public void setName(String name) {
this.name = name;
}
public void setCoor(String coor) {
this.coor= coor;
}
}
private static class Spindles{
private String load;
private int speed;
private String name;
private int ov_spindle;
public void setLoad(String load) {
this.load = load;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public void setName(String name) {
this.name = name;
}
public void setOv_spindle(int ov_spindle) {
this.ov_spindle = ov_spindle;
}
}
private static class Path{
private String status;
private List<Alarm> alarm;
private List<Axes> axes;
private List<Spindles> spindles;
/*
一大堆属性
一大堆setter
*/
}
@AutoIncreaseID //自己写的MongoDB自增ID注解
private Long id;
private List<Path> path;
private int result;
public void setPath(List<CncDataWithoutMqttMongoEntity.Path> path) {
this.path = path;
}
public void setResult(int result) {
this.result = result;
}
然后controller层改成了:
public ResponseModel<CncDataWithoutMqttMongoEntity> saveCncDataMongo(@RequestBody CncDataWithoutMqttMongoEntity entity)
这样我就能在代码内获取到对应字段并进行操作辣!