6.29下午笔记(7)

post与get

在这里插入图片描述

  1. 安全方面:post不显示在地址栏里,get显示在地址栏里
  2. get请求(由于地址栏)对参数有长度限制,post无

post请求的三种参数形式:

  • x-www-form-urlencoded:传统浏览器表单提交,自己写的代码很少,是浏览器自动处理(jQuery)
  • FormData:表单中携带文件上传
  • application / json:传json格式数据(Vue)(由于欠他axios的post请求传对象默认是json格式,所以后台采用json接收)

后端传数据:springMVC,springMVC是如何对待三种请求的?

  • 使用散列的参数列表声明:Integer id,String name,或者Product product使用对象接收
  • formdata:MultpartFile
  • Json:@RequestBody Product product

后端使用什么取决于前端使用什么技术。

PostMan选择:

  • x-www-form-urlencoded:x-www-form-urlencoded
  • FormData:form-data
  • application / json:raw

数据校验

  • 前端校验:使用js对输入框里的内容进行校验,校验通过表单提交,不通过提示并且阻止提交。

  • 后端校验:在controller中校验数据格式:

有前端校验为什么还需要后端校验?

  • 后端校验:安全性需要,例如使用net包里的socket包就可以获得数据。(网络安全)抓包:前端发数据是不安全的。前端不能调时间,传了也不能用,这是不真实的。

jsr303校验:
校验标准,对对象中的数据进行校验
hibernate框架实现过这个标准校验
springMVC整合了hibernate的校验方式

校验结果:
封装到一个数据中交给用户自己去处理BinndingResult

校验方法:


public class ProductForm {
    private Integer id;

    @NotNull(message = "类别id不能为空")
    private Integer categoryId;
    @NotBlank(message = "商品名不能为空")
    private String name;
    @NotBlank(message = "简介不能为空")
    private String subtitle;
    @NotBlank(message = "主图地址不能为空")
    private String mainImage;
    @NotBlank(message = "详情图不能为空")
    private String subImages;
    @NotBlank(message = "详情不能为空")
    private String detail;
    @NotNull(message = "加价格不能为空")
    @Min(value = 0,message = "价格不能小于0")
    private BigDecimal price;
    @NotNull(message = "库存不能为空")
    @Min(value = 0,message = "库存不能小于0")
    private Integer stock;
    @NotNull(message = "状态不能为空")
    private Integer status;

    public ProductForm(){}

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSubtitle() {
        return subtitle;
    }

    public void setSubtitle(String subtitle) {
        this.subtitle = subtitle;
    }

    public String getMainImage() {
        return mainImage;
    }

    public void setMainImage(String mainImage) {
        this.mainImage = mainImage;
    }

    public String getSubImages() {
        return subImages;
    }

    public void setSubImages(String subImages) {
        this.subImages = subImages;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "ProductForm{" +
                "id=" + id +
                ", categoryId=" + categoryId +
                ", name='" + name + '\'' +
                ", subtitle='" + subtitle + '\'' +
                ", mainImage='" + mainImage + '\'' +
                ", subImages='" + subImages + '\'' +
                ", detail='" + detail + '\'' +
                ", price=" + price +
                ", stock=" + stock +
                ", status=" + status +
                '}';
    }
}

对于VO对象中的data,规定当data不为空(null)时才显示:

    @JsonInclude(JsonInclude.Include.NON_NULL)

VO对象的code

一般默认0为请求正确,其他为错误
例如:HTTP状态码

code值含义
1**
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

idea TODO

具有TODO视图

用枚举来处理数据异常

  • 定义数据异常枚举类ResultException:
package com.neutech.enumeration;

public enum ResultExceptionEnum {
    FORMAT_EXCEPTION(1001,"数据格式异常"),
    DATA_NON_EXISTS(1002,"数据格式不存在");

    private Integer code;
    private String message;

    ResultExceptionEnum(Integer code,String message){
        this.code=code;
        this.message=message;
    }


    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

  • 在代码中使用枚举类的code:其中:
  1. BindingResult:异常数组,将所有@Valid返回的异常整理为一个数据
  2. getDefaultMessage():返回form类中默认返回的message,form类见上面数据校验中的ProductForm
    @PostMapping("/addProduct")
    public ResultVO addProduct(@RequestBody@Valid ProductForm productForm, BindingResult bindingResult){
        if (bindingResult.getErrorCount()>0){
//            return ResultVO.error(ResultExceptionEnum.FORMAT_EXCEPTION.getCode(),ResultExceptionEnum.FORMAT_EXCEPTION.getMessage());
            return ResultVO.error(ResultExceptionEnum.FORMAT_EXCEPTION.getCode(),bindingResult.getAllErrors().get(0).getDefaultMessage());
        }

        return productService.addProduct(productForm);
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值