JavaBean字段如何防止非空赋值

 更新时间:2021年08月31日 08:44:53   作者:HealerJean.  
这篇文章主要介绍了JavaBean字段如何防止非空赋值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JavaBean字段防止非空赋值

前言

工具类制作起因,有时候项目中出一点点错误,在所难免,经常,有些地方的字段是String,但是到了其他地方是Long,Date,Interger,BigDecimal,这个时候每次都需要判断下是否为空,否则就会在New BigDecimal(string)等中转化失败,报空指针。 如果字段很多,简直太恶心了。

这里日期是最恶心心,日期分为Date类型和String类型 转化为Date

举例

 if(string!=null){
    date.setBigValue(new BigDecimal(string));
  }

1、JavaBean制作

1.1、初始JavaBean User

public class User {
 /**
     * 如果属性类型为基本数据类型,则会有默认值
     * 影响正确判断,请特别注意
     */
//  private int age;
    private Integer age;
    private String name;
    private String gender;
    private BigDecimal bigDecimal;
    private Date date ;
    private Long longvalue;    
    private String dateStr ; //注意这里是String类型的日期 例如 2018-12-09 00:00:00
    get set……

1.2、被赋值的JavaBean

/**
 * 作者 :HealerJean
 * 日期 :2018/12/13  上午11:03.
 * 类描述:
 */
public class UserNow {
    private String nameNow;
    private String genderNow;
    private Integer ageNow;
    private BigDecimal bigDecimalNow ;
    private Date dateNow ;
    private Long longvalueNow;
    private Date dateStrNow ; //注意这里是Date类型
get set……

2、利用反射实现工具类

需要注意的是,下面的日期,在我们通过反射获取到值的时候,它打印出来的是英文日期串,我们需要对他进行一个转化

package com.hlj.IgnoreNullBean;
import org.junit.platform.commons.util.StringUtils;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
 * 作者 :HealerJean
 * 日期 :2018/12/13  上午10:55.
 * 类描述 防止非空字段,在类似于 new BigDecimal(string))中进行报错
 */
public class JavaBeanUtil {
    /**
     *
     * @param object 原始数据JavaBean
     * @param originFieldName 原始数据 字段名字 比如:name
     * @param newObject 新复制的JavaBean
     * @param newFilldName 新赋值的字段名字 比如 nameNow
     * @param dateFormat 如果是date类型的日期,
     *                   1、传入的是String字符串'2018-12-09'   则需要传入相应Fromat格式 yyyy-MM-dd HH:mm:ss
     *                   2、如果是标准高的date类型,那么.toString之后是 -> Fri Dec 14 19:00:07 CST 2018, 则设置为null
     */
    public static  void setFieldValue(Object object,String originFieldName,Object newObject,String newFilldName,String ...dateFormat) {
        try {
            Field field = object.getClass().getDeclaredField(originFieldName);
            field.setAccessible(true);
            Field newfield = newObject.getClass().getDeclaredField(newFilldName);
            newfield.setAccessible(true);
            String newfieldType=newfield.getGenericType().toString();
            if (field.get(object) != null && StringUtils.isNotBlank(field.get(object).toString())) {
                String value = field.get(object).toString();
                System.out.println(value);
                switch (newfieldType){
                    case "class java.lang.Integer":
                        newfield.set(newObject, Integer.valueOf(value));
                        break;
                    case "class java.lang.Long":
                        newfield.set(newObject, Long.valueOf(value));
                        break;
                    case "class java.math.BigDecimal":
                        newfield.set(newObject, new BigDecimal(Double.valueOf(value)) );
                        break;
                    case "class java.util.Date":
                        Date  date = null;
                        if(dateFormat!=null&&dateFormat.length>0){
                            date = new SimpleDateFormat(dateFormat[0]).parse(value);
                            newfield.set(newObject, date);
                        }else {
                              date=new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK).parse(value);
                        }
                        newfield.set(newObject, date);
                        break;
                    default:
                        break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3、测试

package com.hlj.IgnoreNullBean;
import com.hlj.IgnoreNullBean.data.User;
import com.hlj.IgnoreNullBean.data.UserNow;
import java.math.BigDecimal;
import java.util.Date;
/**
 * 作者 :HealerJean
 * 日期 :2018/12/13  上午10:54.
 * 类描述:
 */
public class TestMain {
    public static void main(String[] args) {
        User user = new User();
        user.setAge(25);
        user.setBigDecimal(new BigDecimal(10.21));
        user.setDate(new Date());
        user.setLongvalue(100L);
        user.setDateStr("2018-12-09 00:00:00");
        UserNow userNow = new UserNow() ;
        JavaBeanUtil.setFieldValue(user,"age",userNow,"ageNow");
        System.out.println("ageNow:"+userNow.getAgeNow());
        JavaBeanUtil.setFieldValue(user,"bigDecimal",userNow,"bigDecimalNow");
        System.out.println("bigDecimalNow:"+userNow.getBigDecimalNow());
        JavaBeanUtil.setFieldValue(user,"date",userNow,"dateNow");
        System.out.println("dateNow:"+ userNow.getDateNow());
        JavaBeanUtil.setFieldValue(user,"longvalue",userNow,"longvalueNow");
        System.out.println("longvalueNow:"+userNow.getLongvalueNow());
        JavaBeanUtil.setFieldValue(user,"dateStr",userNow,"dateStrNow","yyyy-MM-dd HH:mm:ss");
        System.out.println("dateStrNow:"+userNow.getDateStrNow());
    }
ageNow:25
bigDecimalNow:10.21000000000000085265128291212022304534912109375
dateNow:Fri Dec 14 19:27:07 CST 2018
longvalueNow:100
dateStrNow:Sun Dec 09 00:00:00 CST 2018

判断javabean是否非空,并给前台报出错误信息

1、工具类

package com.duodian.youhui.admin.utils;
import com.duodian.youhui.admin.Exceptions.AppException;
import com.duodian.youhui.entity.db.taobao.TaobaoWechat;
import java.lang.reflect.Field;
/**
 * 作者 :HealerJean
 * 日期 :2019/1/24  下午4:30.
 * 类描述:判断是否为空 或者是null 工具
 */
public class JudgeNullUtils {
    public static boolean isNull(Object object,String ... fieldName){
        try {
            for (int i = 0; i < fieldName.length; i++) {
                Field field = null;
                    field = object.getClass().getDeclaredField(fieldName[i]);
                field.setAccessible(true);//暴力反射,获取获取数据
                if(field.get(object)==null){
                    //返回flase或者直接抛出异常,根据我们的情况而定
                    throw  new AppException(fieldName[i]+"不能为空");
                }
            }
            return true ;
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return false ;
    }
}

2、catch捕获

    @ApiOperation(value = "添加淘宝营销总代理",
            notes = "添加淘宝营销总代理",
            consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE,
            response = ResponseBean.class
    )
    @ResponseBody
    @GetMapping("addEsWechat")
    public ResponseBean addEsWechat(TaobaoEsWechat taobaoWechat ){
        try {
            JudgeNullUtils.isNull(taobaoWechat,"code","status");
            return ResponseBean.buildSuccess(taobaoEsWechatService.addTaobaoEsWechat(taobaoWechat));
        } catch (AppException e) {
            ExceptionLogUtils.log(e, this.getClass());
            return ResponseBean.buildFailure(e.getCode(),e.getMessage());
        } catch (Exception e) {
            ExceptionLogUtils.log(e, this.getClass());
            return ResponseBean.buildFailure(e.getMessage());
        }
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于Java的正则表达式

    基于Java的正则表达式

    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念
    2017-05-05
  • springboot整合apache ftpserver详细教程(推荐)

    springboot整合apache ftpserver详细教程(推荐)

    这篇文章主要介绍了springboot整合apache ftpserver详细教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 深入理解Java SpringCloud Ribbon 负载均衡

    深入理解Java SpringCloud Ribbon 负载均衡

    Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制。这篇文章主要介绍了SpringCloud Ribbon 负载均衡的实现,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java中Buffer缓冲区的ByteBuffer类详解

    Java中Buffer缓冲区的ByteBuffer类详解

    这篇文章主要介绍了Java中Buffer缓冲区的ByteBuffer类详解,ByteBuffer类是Java NIO库中的一个重要类,用于处理字节数据,它提供了一种灵活的方式来读取、写入和操作字节数据,ByteBuffer类是一个抽象类,可以通过静态方法创建不同类型的ByteBuffer对象,需要的朋友可以参考下
    2023-10-10
  • java灵活使用mysql中json类型字段存储数据详解

    java灵活使用mysql中json类型字段存储数据详解

    在数据库设计中,面对一对多的关系,如订单和商品,可以考虑使用单表存储而非传统的分表方式,这篇文章主要介绍了java灵活使用mysql中json类型字段存储数据的相关资料,需要的朋友可以参考下
    2024-09-09
  • MybatisPlus3.5.5与pagehelper starter2.1.0冲突的问题解决

    MybatisPlus3.5.5与pagehelper starter2.1.0冲突的问题解决

    在使用MybatisPlus 3.5.5与PageHelper Starter 2.1.0时,由于引用了不同版本的jsqlparser库(4.6与4.7),会导致运行时错误,解决方案涉及确认依赖版本,本文就来介绍一下,感兴趣的同学可以下载学习
    2024-10-10
  • Springboot中yml文件没有叶子图标的解决

    Springboot中yml文件没有叶子图标的解决

    这篇文章主要介绍了Springboot中yml文件没有叶子图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SWT(JFace) 简易浏览器 制作实现代码

    SWT(JFace) 简易浏览器 制作实现代码

    SWT(JFace) 简易浏览器 制作实现代码
    2009-06-06
  • SpringCloud使用FFmpeg对视频压缩处理的代码示例

    SpringCloud使用FFmpeg对视频压缩处理的代码示例

    在现代的视频处理系统中,压缩视频以减小存储空间、加快传输速度是一项非常重要的任务,FFmpeg作为一个强大的开源工具,广泛应用于音视频的处理,包括视频的压缩和格式转换等,本文将通过Java代码示例,向您展示如何使用FFmpeg进行视频压缩,并介绍相关参数的设置
    2024-11-11
  • 实例代码讲解JAVA 观察者模式

    实例代码讲解JAVA 观察者模式

    这篇文章主要介绍了JAVA 观察者模式的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06

最新评论