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()); }