关于 @RequestBody对象为null 的问题

简介: 关于 @RequestBody对象为null 的问题

@RequestBody对象为null

今天遇到了一个非常奇怪的问题,当我在使用@RequestBody 进行传参时,在service层一直获取不到对象值,后台提示错误是空指针异常,找了很久都没有发现是什么问题,结果在最后发现是注解的坑。

Controller层:

    @GetMapping("/**/{pageNow}/{pageSize}")
    public Response getAllCourseByPage(@PathVariable long pageNow,
                                       @PathVariable long pageSize,
                                       @RequestBody(required = false) **Query **Query) {
        Page<EduCourse> **Page = new Page(pageNow, pageSize);
        courseService.pageQuery(**Page, **Query);
        long total = **Page.getTotal();
        List<EduCourse> records = **Page.getRecords();
        return Response.ok().data("total", total).data("items", records);
    }

service层:

    @Override
    public void pageQuery(Page<EduCourse> **Page, **Query **Query) {
        QueryWrapper<EduCourse> queryWrapper = new QueryWrapper<>();

        String title = **Query.getTitle();
        String status = **Query.getStatus();
        if (!StringUtils.isEmpty(title)) {
            queryWrapper.like("title", title);
        }
        if (!StringUtils.isEmpty(status)) {
            queryWrapper.eq("status", status);
        }
        queryWrapper.orderByDesc("gmt_create");
        baseMapper.selectPage(coursePage, queryWrapper);
    }

swagger测试:

在这里插入图片描述

报错信息:

java.lang.NullPointerException
    at com.nanjuedu.serviceedu.service.impl.EduCourseServiceImpl.pageQuery(EduCourseServiceImpl.java:102)
    at com.nanjuedu.serviceedu.service.impl.EduCourseServiceImpl$$FastClassBySpringCGLIB$$d6c817dd.invoke(<generated>)

但是经过debug之后发现我的service层中并没有获取到对象(Query),导致对象(Query)为空,当对象调用getter方法时就会爆出空指针异常的错误!找了很久都没发现哪里出错了,结果是错在了注解上!!!

解决方法

springMvc的新注解:GetMapping 不支持@RequestBody ,使用PostMapping改成以下代码就可以了!

 @PostMapping("/**/{pageNow}/{pageSize}")
    public Response getAllCourseByPage(@PathVariable long pageNow,
                                       @PathVariable long pageSize,
                                       @RequestBody(required = false) **Query **Query) {
        Page<EduCourse> **Page = new Page(pageNow, pageSize);
        courseService.pageQuery(**Page, **Query);
        long total = **Page.getTotal();
        List<EduCourse> records = **Page.getRecords();
        return Response.ok().data("total", total).data("items", records);
    }

swagger测试:
在这里插入图片描述
上面的解决方法是个人见解,可能会有问题和错误,希望小伙伴们可以指正😘😘。

目录
相关文章
|
5月前
@Autowired注解获取对象为null
@Autowired注解获取对象为null
46 0
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
|
5月前
|
SQL JSON Java
Java【问题记录 02】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
Java【问题记录 02】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
67 0
|
5月前
|
JavaScript 前端开发
JavaScript快速删除对象数组中某一个指定元素。注意:是对象数组,如果是数值数组,请慎用!会伤及无辜0、false、英文空格、undefined、null。
JavaScript快速删除对象数组中某一个指定元素。注意:是对象数组,如果是数值数组,请慎用!会伤及无辜0、false、英文空格、undefined、null。
|
算法 Java 索引
为什么对象设置为Null的时候会利于GC的回收?
为什么对象设置为Null的时候会利于GC的回收?
152 0
为什么对象设置为Null的时候会利于GC的回收?
|
设计模式 uml
空对象模式(Null Object Pattern)
空对象模式(Null Object Pattern)不属于GoF设计模式,但是它作为一种经常出现的模式足以被视为设计模式了。其具体定义为设计一个空对象取代NULL对象实例的检查。NULL对象不是检查控制,而是反映一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为,属于行为型设计模式。
85 0
|
算法 Java 开发者
面试必问:对象不再使用时,为什么要赋值为 null ?
面试必问:对象不再使用时,为什么要赋值为 null ?
|
前端开发 Java 索引
Java 中数组 binarySearch 方法and拷贝对象工具类CopyUtils-可忽略覆盖Null值详解
[1] 该搜索键在范围内,但不是数组元素,由1开始计数,得“ - 插入点索引值”; [2] 该搜索键在范围内,且是数组元素,由0开始计数,得搜索值的索引值; [3] 该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1); [4] 该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1)。
131 0
Java 中数组 binarySearch 方法and拷贝对象工具类CopyUtils-可忽略覆盖Null值详解
|
Java C++
Java中对象为null和调用对象清除方法clear()的不同
Java中对象为null和调用对象清除方法clear()的不同
543 0
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。