处理controller层的数据
1.给没有传入的参数赋默认值,使用defaultVaule
//订单列表 @GetMapping("/list") public ResultVO<List<OrderDto>> list(@RequestParam("openid") String openid, @RequestParam(value = "page",defaultValue = "1") Integer page, @RequestParam(value = "size",defaultValue = "10") Integer size){ if(StringUtils.isEmpty(openid)){ log.error("订单的openid为空"); throw new SellException(ExceptionEnum.ORDERID_NOT_EXISIT); } List<OrderDto> orderDtoList = orderService.findAllByOpenid(openid,page,size); return ResultVOUtil.success(orderDtoList); }
2.对传入参数做表单验证
(1)contorller层
//创建订单 public ResultVO<Map<String,String>> create(@Valid OrderForm orderForm , BindingResult result){ if(result.hasErrors()){ //表单验证不通过 log.error("提交数据时出错,传递参数---{}"+orderForm); throw new SellException(ExceptionEnum.PARM_ERROR.getCode(), result.getFieldError().getDefaultMessage()); //获取默认的错误信息 } OrderDto orderDto = new OrderDto(); orderDto = OrderForm2OrderDtoconverter.convert(orderForm); if(orderDto.getOrderDetailList().isEmpty()){ log.error("购物车不能为空"); throw new SellException(ExceptionEnum.CART_NOT_NULL); } OrderDto createResult = orderService.create(orderDto); Map<String,String > map = new HashMap<>(); map.put("orderId",createResult.getOrderId()); return ResultVOUtil.success(map); }
(2)实体类中的代码
@Data @JsonInclude(value = JsonInclude.Include.NON_NULL) //字段为null,前端不展示为null的字段,也可在配置文件中全局设置 public class OrderForm { /** 买家姓名 */ @NotEmpty(message = "姓名不能为空") //为空时的提示信息 private String name; /** 买家手机号码 */ @NotEmpty(message = "手机号必填") private String phone; /** 买家的收货地址 */ @NotEmpty(message = "地址必填") private String address; /** openid */ @NotEmpty(message = "openid必填") private String openid; /** 购物车*/ @NotEmpty(message = "购物车不能为空") private String items; }
3.对返回给页面的值做处理
(1)将为null的字段不展示
实体类之前加词注解
@JsonInclude(value = JsonInclude.Include.NON_NULL) //字段为null,前端不展示为null的字段,也可在配置文件中全局设置
或者
spring: #当返回字段为null,前端不展示为null字段 如果要展示空字符串,在实体类中添加 :如 -> private String name ="" jackson: default-property-inclusion: non_null
(2)将为null的字符串展示为"",数组展示为[],int展示为0
@Data public class OrderDto { private String orderId = ""; private Integer orderStatus = 0; List<OrderDetail> orderDetailList = new ArrayList<>(); }
3.将后台时间类型的数据转为String类型返回
(1).创建一个工具类,并继承JsonSerializer<T>类,并重写serialize方法
/** * 将时间类型转为string类型,并返回给前台 */ public class Date2LongSerializer extends JsonSerializer<Date> { @Override public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { gen.writeNumber( value.getTime()/1000); } }
(2).使用@JsonSerialize注解完成
public class OrderDto { private String orderId = ""; private String buyerName;
//订单状态 private Integer orderStatus; //支付状态 0,等待支付 private Integer payStatus; //创建时间 @JsonSerialize(using = Date2LongSerializer.class) //使用指定格式返回 private Date createTime; //更新时间 @JsonSerialize(using = Date2LongSerializer.class) private Date updateTime; List<OrderDetail> orderDetailList = new ArrayList<>(); }
4.@JsonProperty可以实现前端的属性名和后台实体类的属性名不一致问题
@Data public class ProductVO { @JsonProperty("name") //返回给前台的json串中的字段名为name private String caregoryName; @JsonProperty("type") private String caregoryType; @JsonProperty("foods") private List<ProductInfoVO> productInfoVOList; }