• hibernate.validator 与 jackson


    1、使用hibernate.validator校验非空,在FormData类中 name字段上面加@NotEmpty

    @NotEmpty(message = "姓名必填")
    private  String name;

    在Controller  @Valid注解formData   ,bindingResult.hasErrors() 来看是否校验出错

    public void save(@Valid FormData formData ,BindingResult bindingResult){
    
        if (bindingResult.hasErrors() ) {
    
            log.error("参数不正确,formData ={}",formData );
    
            throw new SellExcetion(ResultEnum.PARAM_ERROR.getCode(),
    
                    bindingResult.getFieldError().getDefaultMessage());
    
        }
    
    }
    

    2、@Transactional 加事物

    3、如果想productId 在返回Json 为 id,那就在productId属性 加上@JsonProperty("id") 如:

    @JsonProperty("id")
    private  String productId;
    

    4、//json to Object

    Gson gson = new Gson();
    
    try {
    
       OrderDetailList   orderDetailList = gson.fromJson(orderForm.getItems(),
    
                new TypeToken<List<OrderDetail>>(){}.getType());
    
        orderDTO.setOrderDetailList(orderDetailList);
    
    }catch (Exception e) {
    
        log.error("【对象转换】 错误, String = {}",orderForm.getItems());
    
        throw new SellExcetion(ResultEnum.PARAM_ERROR);
    
    }
    

    5、

    @JsonIgnoreProperties

    此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

    @JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。

    如果指定要忽略的字段。使用方法如下:

    @JsonIgnoreProperties({ "name" })
    指定的字段不会被序列化和反序列化。

    @JsonIgnore

    此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。

    @JsonFormat

    此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")

    @JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
    private  Date updateTime;
    

    效果: "updateTime": "2017-10-11 12-40-24",

    @JsonSerialize

    此注解用于属性或者getter方法上,用于在序列化时可以执行我们的方法

    @JsonSerialize(using = Date2longSerializer.class)
    private Date createTime;
    

    这里你也可以格式化  ,最后jsonGenerator.writeString(string);

    public class Date2longSerializer extends JsonSerializer<Date>{
    
        @Override
    
        public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
    
            jsonGenerator.writeNumber(date.getTime() / 1000);
    
        }
    
    }
    

    效果:"createTime": 1507725624,

    @JsonDeserialize

    此注解用于属性或者setter方法上,用于在反序列化时可以执行我们的方法,类似于上面的@JsonSerialize

    @JsonDeserialize(using = DateDeserializer.class)
    private  Date updateTime;
    

      这里加了一天时间

    public class DateDeserializer extends JsonDeserializer<Date> {
    
        @Override
    
        public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
    
            Date date = deserializationContext.parseDate(jsonParser.getText());
    
            Calendar cal = Calendar.getInstance();
    
            cal.setTime(date);
    
            cal.add(Calendar.DATE, 1);
    
            return cal.getTime();
    
        }
    
    }
    

    测试:

    public void test2() throws IOException {
    
        String orderDTOJson = "{"buyerName":"李四","buyerPhone":"1382719972","buyerAddress":"男生","buyerOpenid":"sdsdsadasd","orderAmount":450.00,"orderStatus":0,"payStatus":0,"createTime":1507725624000,"updateTime":"1507725624000","orderId":"1507725621667450867"}";
    
        ObjectMapper mapper = new ObjectMapper();
    
        OrderDTO orderDTO = mapper.readValue(orderDTOJson, OrderDTO.class);
    
        System.out.println(orderDTO.getUpdateTime());
    
    }
    
  • 相关阅读:
    C# 常用函数和方法集
    CSS选择器、优先级和匹配原理
    都是王安石惹的祸?
    世界上的一类
    历史之不可理喻片段
    历史惊人的相似
    20世纪鲜为人知的军事巨灾
    unity制作简单血条
    Unity中Instantiate物体失效问题
    Unity3D实现DoubleClick的一种方法
  • 原文地址:https://www.cnblogs.com/weiapro/p/7658469.html
Copyright © 2020-2023  润新知