处理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;


}

 

posted @ 2018-07-16 22:33  qqq齐  阅读(250)  评论(0)    收藏  举报