杂文(11)RequestBody拿到数据后进行处理

最后更新于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)

这样我就能在代码内获取到对应字段并进行操作辣!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值