springboot前端post到后端实体映射时

博客讨论了在SpringBoot应用中,前端POST请求传递的数据导致后端实体映射异常的问题。当前端传入的数据类型与后端实体不匹配时,可能导致实体属性为空,进而影响模糊查询的SQL语句。解决方案是在后端对每个属性进行判断,避免空值参与查询。
摘要由CSDN通过智能技术生成

springboot前端post到后端实体映射时

首先实体类是这样的

public class RentOrder{
    private Integer id;
    private String username;
}
    @PostMapping("getListByRentOrder")
    public R getListByRentOrder(@RequestBody RentOrder rentOrder){
        QueryWrapper<RentOrder> rentOrderQueryWrapper = new QueryWrapper<>();
        rentOrderQueryWrapper.like("id",rentOrder.getId());
        rentOrderQueryWrapper.like("username",rentOrder.getUsername());
        List<RentOrder> list = rentOrderService.list(rentOrderQueryWrapper);
        return R.ok().data("list",list);
    }

假如前端传入的data是这样的

rentOrder{
	id:"",
	username:"李白"
}

到了后端映射的实体rentOrder是这样的

rentOder.getId=null
rentOrder.getUsername="李白"

这样会导致你使用模糊查询时,拼接的sql字符串是这样的

select * from rent_order where id like "%null%" and username like "%李白%"

这样查出来的数据往往是空的,因为你的数据库的 id 不可能有like null 的吧
而你期待的其实是这样的

select * from rent_order where id like "%%" and username like "%李白%"

造成这样结果是什么原因呢?
大概是这样的

data() {
        return {
            searchOrder: {
                id:"",
                username:"",
            }
        }
    },

**前端在定义数据的时候没有按对应后端的格式定义,就是id本来是int类型,而你写的是string,如果你在前端用到了这个字段,比如你填了一个1,那么后端的实体类是会被映射到的,rentOser.getId()=1 ,如果你没有填,后端就不会映射到,rentOser.getId()=null
如果你的后端的id也是String类型就不会存在这种问题

解决方法有很多,这里在后端解决一下

    @PostMapping("getListByRentOrder")
    public R getListByRentOrder(@RequestBody RentOrder rentOrder){
        QueryWrapper<RentOrder> rentOrderQueryWrapper = new QueryWrapper<>();
        if (rentOrder.getId()!=null){
            rentOrderQueryWrapper.like("id",rentOrder.getId());
        }
        rentOrderQueryWrapper.like("username",rentOrder.getUsername());
        List<RentOrder> list = rentOrderService.list(rentOrderQueryWrapper);
        return R.ok().data("list",list);
    }
Spring Boot项目中,如果你的前端通过HTTP请求将`Project`对象作为JSON数据传递给后端,你可以按以下步骤在后端接收这个对象: 1. **定义Project实体类**:首先,在后端项目的模型层(通常是`domain`包下的`Project.java`),创建一个表示`Project`的数据类,例如: ```java import java.util.Date; public class Project { private Long id; private String name; private Date startDate; // 其他属性和getter/setter... } ``` 2. **序列化和反序列化**:Spring Boot默认支持Jackson库来进行JSON转换。所以,`Project`对象会被自动转换成JSON字符串,反之亦然。如果你直接处理HTTP POST请求,无需额外配置。 3. **处理HTTP请求**:在你的Controller类中,创建一个处理POST请求的方法,并接收`@RequestBody`注解,这会使Spring Boot尝试解析请求体并注入到方法参数中: ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class ProjectController { @PostMapping("/projects") public ResponseEntity<?> createProject(@RequestBody Project project) { // 这里处理项目创建逻辑,然后返回响应 } } ``` 在这个例子中,`createProject`方法接受一个`Project`类型的参数,前端发送过来的JSON数据将会自动映射为这个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值