赞
踩
案例中使用的springboot的版本为2.0.4.RELEASE
1.添加fastjson依赖
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.49</version>
- </dependency>
2.修改springboot默认的json转换工具为fastjson(如果不需要自定义注解序列化,注释掉fastJsonConfig.setSerializeFilters(new ZreContextValueFilter())这个就可以了)
- @Configuration
- public class ConverterConfig {
- @Bean
- public HttpMessageConverters fastJsonHttpMessageConverters() {
- //创建FastJson信息转换对象
- FastJsonHttpMessageConverter fastJsonHttpMessageConverter =
- new FastJsonHttpMessageConverter();
- //创建FastJson对象并设定序列化规则
- FastJsonConfig fastJsonConfig = new FastJsonConfig();
- //添加自定义valueFilter
- fastJsonConfig.setSerializeFilters(new ZreContextValueFilter());
- fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
- fastJsonHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
- //规则赋予转换对象
- fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
- StringHttpMessageConverter stringHttpMessageConverter =
- new StringHttpMessageConverter(Charset.forName("UTF-8"));
- return new HttpMessageConverters(fastJsonHttpMessageConverter, stringHttpMessageConverter);
- }
- }

3.创建自定义注解NumberDesensitization
- @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
- @Retention(RetentionPolicy.RUNTIME)
- public @interface NumberDesensitization {
-
- }
4.创建ZreContextValueFilter类实现ContextValueFilter,至于为什么要实现这个类,可以参考下这篇博客(springboot工程中用自定义注解的方式json序列化(fastjson)和ContextValueFilter)
- public class ZreContextValueFilter implements ContextValueFilter {
-
- private final static Logger logger = LoggerFactory.getLogger(ZreContextValueFilter.class);
-
- @Override
- public Object process(BeanContext context, Object object, String name, Object value) {
- if (value == null || !(value instanceof String)) {
- return value;
- }
- NumberDesensitization annation = context.getAnnation(NumberDesensitization.class);
- if (annation == null) {
- return value;
- }
- String propertyValue = (String) value;
- if (StringUtils.isEmpty(propertyValue)) {
- return "";
- }
- logger.debug("脱敏手机号成功:"+propertyValue);
- propertyValue = String.format("%s****%s",propertyValue.substring(0, 3), propertyValue.substring(7));
- return propertyValue;
- }
-
- }

5.给javaBean添加自定义注解@NumberDesensitization
- public class SysUser implements Serializable{
-
- private static final long serialVersionUID = 1L;
-
- private String username;
-
- private String loginCode;
-
- private String password;
-
- private Date createDate;
-
- private String mobile;
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- @JSONField(serialize = false)
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- @JSONField(format = "yyyy-MM-dd HH:mm:ss")
- public Date getCreateDate() {
- return createDate;
- }
-
- public void setCreateDate(Date createDate) {
- this.createDate = createDate;
- }
-
- public String getLoginCode() {
- return loginCode;
- }
-
- public void setLoginCode(String loginCode) {
- this.loginCode = loginCode;
- }
-
- @NumberDesensitization
- public String getMobile() {
- return mobile;
- }
-
- public void setMobile(String mobile) {
- this.mobile = mobile;
- }
-
- }

6.验证结果
- {
- code: 1,
- data: {
- createDate: "2018-07-14 15:56:27",
- loginCode: "system",
- mobile: "183****2234",
- username: "超级管理员"
- },
- message: "success"
- }
好了,到这里就完成了自定义注解了,注意实现了ContextValueFilter后需要将实现类添加到FastJsonConfig的serializeFilters中,本人小白一枚,有哪里写的不对的地方,欢迎评论指出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。