CreateOrderReq传入参数校验不能为空,为什么没生效呢?

CreateOrderReq传入参数校验不能为空,为什么没生效呢?

package com.imooc.mall.controller;

import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.model.request.CreateOrderReq;
import com.imooc.mall.service.OrderService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;

@RestController
public class OrderController {
    @Resource
    OrderService orderService;
    @PostMapping("order/create")
    public ApiRestResponse create(@Valid @RequestBody CreateOrderReq createOrderReq){
        String orderNo = orderService.create(createOrderReq);
        return ApiRestResponse.success(orderNo);
    }
}
package com.imooc.mall.model.request;

import javax.validation.constraints.NotNull;

public class CreateOrderReq {
    @NotNull(message = "收件人姓名不能为null")
    private String receiverName;
    @NotNull(message = "收件人手机号不能为null")
    private String receiverMobile;
    @NotNull(message = "收件人地址不能为null")
    private String receiverAddress;

    private Integer orderStatus;

    private Integer postage;

    private Integer paymentType;

    public String getReceiverName() {
        return receiverName;
    }

    public void setReceiverName(String receiverName) {
        this.receiverName = receiverName;
    }

    public String getReceiverMobile() {
        return receiverMobile;
    }

    public void setReceiverMobile(String receiverMobile) {
        this.receiverMobile = receiverMobile;
    }

    public String getReceiverAddress() {
        return receiverAddress;
    }

    public void setReceiverAddress(String receiverAddress) {
        this.receiverAddress = receiverAddress;
    }

    public Integer getOrderStatus() {
        return orderStatus;
    }

    public void setOrderStatus(Integer orderStatus) {
        this.orderStatus = orderStatus;
    }

    public Integer getPostage() {
        return postage;
    }

    public void setPostage(Integer postage) {
        this.postage = postage;
    }

    public Integer getPaymentType() {
        return paymentType;
    }

    public void setPaymentType(Integer paymentType) {
        this.paymentType = paymentType;
    }
}

https://img1.sycdn.imooc.com//climg/63f9c5e9096f9b8228801448.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-02-25 16:54:38

同学你好,从截图中看,同学给receiverName参数传递的是“空字符串”而不是“null值”,属性上的注解用于检测值是否是null。

空字符串的本质依然是字符串,并不是null值。当不给这个参数传递任何数据的时候,receiverName参数的值才会是null。

祝学习愉快~

  • 提问者 王小east #1
    1.前端用户如果不填写收件人姓名,传给后台的是空字符串还是null呢? 2.空字符串又该如何进行校验呢
    2023-02-25 16:57:07
  • 好帮手慕小蓝 回复 提问者 王小east #2

    同学你好~

    1.前端如果是表单的话,实际传入的数据是空字符串,只有没给这个参数设置绑定参数时,才会是null。例如前端压根没有名为receiverName的参数时,这个值才会为null值。

    2.空字符串会在前端的表单进行验证,例如要求用户不能输入空字符串,这些在前面的课程中有过讲解,同学可以复习一下。

    祝学习愉快~

    2023-02-25 17:06:12
  • 提问者 王小east 回复 好帮手慕小蓝 #3

    之前在学“用户注册”功能时,使用StringUtils.isEmpty()方法校验参数是否为空,为什么“用户注册”不在前端表单验证是否为空呢?

    2023-02-25 21:30:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师