当前位置:   article > 正文

springboot 修改fastjson序列化javabean并添加自定义注解_fastjson tostring 如何实现自定义注解

fastjson tostring 如何实现自定义注解

案例中使用的springboot的版本为2.0.4.RELEASE

1.添加fastjson依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.49</version>
  5. </dependency>

2.修改springboot默认的json转换工具为fastjson(如果不需要自定义注解序列化,注释掉fastJsonConfig.setSerializeFilters(new ZreContextValueFilter())这个就可以了

  1. @Configuration
  2. public class ConverterConfig {
  3. @Bean
  4. public HttpMessageConverters fastJsonHttpMessageConverters() {
  5. //创建FastJson信息转换对象
  6. FastJsonHttpMessageConverter fastJsonHttpMessageConverter =
  7. new FastJsonHttpMessageConverter();
  8. //创建FastJson对象并设定序列化规则
  9. FastJsonConfig fastJsonConfig = new FastJsonConfig();
  10. //添加自定义valueFilter
  11. fastJsonConfig.setSerializeFilters(new ZreContextValueFilter());
  12. fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
  13. fastJsonHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
  14. //规则赋予转换对象
  15. fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
  16. StringHttpMessageConverter stringHttpMessageConverter =
  17. new StringHttpMessageConverter(Charset.forName("UTF-8"));
  18. return new HttpMessageConverters(fastJsonHttpMessageConverter, stringHttpMessageConverter);
  19. }
  20. }

3.创建自定义注解NumberDesensitization

  1. @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. public @interface NumberDesensitization {
  4. }

4.创建ZreContextValueFilter类实现ContextValueFilter,至于为什么要实现这个类,可以参考下这篇博客(springboot工程中用自定义注解的方式json序列化(fastjson)ContextValueFilter

  1. public class ZreContextValueFilter implements ContextValueFilter {
  2. private final static Logger logger = LoggerFactory.getLogger(ZreContextValueFilter.class);
  3. @Override
  4. public Object process(BeanContext context, Object object, String name, Object value) {
  5. if (value == null || !(value instanceof String)) {
  6. return value;
  7. }
  8. NumberDesensitization annation = context.getAnnation(NumberDesensitization.class);
  9. if (annation == null) {
  10. return value;
  11. }
  12. String propertyValue = (String) value;
  13. if (StringUtils.isEmpty(propertyValue)) {
  14. return "";
  15. }
  16. logger.debug("脱敏手机号成功:"+propertyValue);
  17. propertyValue = String.format("%s****%s",propertyValue.substring(0, 3), propertyValue.substring(7));
  18. return propertyValue;
  19. }
  20. }

5.给javaBean添加自定义注解@NumberDesensitization

  1. public class SysUser implements Serializable{
  2. private static final long serialVersionUID = 1L;
  3. private String username;
  4. private String loginCode;
  5. private String password;
  6. private Date createDate;
  7. private String mobile;
  8. public String getUsername() {
  9. return username;
  10. }
  11. public void setUsername(String username) {
  12. this.username = username;
  13. }
  14. @JSONField(serialize = false)
  15. public String getPassword() {
  16. return password;
  17. }
  18. public void setPassword(String password) {
  19. this.password = password;
  20. }
  21. @JSONField(format = "yyyy-MM-dd HH:mm:ss")
  22. public Date getCreateDate() {
  23. return createDate;
  24. }
  25. public void setCreateDate(Date createDate) {
  26. this.createDate = createDate;
  27. }
  28. public String getLoginCode() {
  29. return loginCode;
  30. }
  31. public void setLoginCode(String loginCode) {
  32. this.loginCode = loginCode;
  33. }
  34. @NumberDesensitization
  35. public String getMobile() {
  36. return mobile;
  37. }
  38. public void setMobile(String mobile) {
  39. this.mobile = mobile;
  40. }
  41. }

6.验证结果

  1. {
  2. code: 1,
  3. data: {
  4. createDate: "2018-07-14 15:56:27",
  5. loginCode: "system",
  6. mobile: "183****2234",
  7. username: "超级管理员"
  8. },
  9. message: "success"
  10. }

好了,到这里就完成了自定义注解了,注意实现了ContextValueFilter后需要将实现类添加到FastJsonConfig的serializeFilters中,本人小白一枚,有哪里写的不对的地方,欢迎评论指出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/871328
推荐阅读
相关标签
  

闽ICP备14008679号