溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaBean字段怎么防止非空賦值

發(fā)布時(shí)間:2021-08-31 10:29:15 來(lái)源:億速云 閱讀:119 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)JavaBean字段怎么防止非空賦值的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

JavaBean字段防止非空賦值

前言

工具類(lèi)制作起因,有時(shí)候項(xiàng)目中出一點(diǎn)點(diǎn)錯(cuò)誤,在所難免,經(jīng)常,有些地方的字段是String,但是到了其他地方是Long,Date,Interger,BigDecimal,這個(gè)時(shí)候每次都需要判斷下是否為空,否則就會(huì)在New BigDecimal(string)等中轉(zhuǎn)化失敗,報(bào)空指針。 如果字段很多,簡(jiǎn)直太惡心了。

這里日期是最?lèi)盒男?,日期分為Date類(lèi)型和String類(lèi)型 轉(zhuǎn)化為Date

舉例

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

1、JavaBean制作

1.1、初始JavaBean User

public class User {
 /**
     * 如果屬性類(lèi)型為基本數(shù)據(jù)類(lèi)型,則會(huì)有默認(rèn)值
     * 影響正確判斷,請(qǐng)?zhí)貏e注意
     */
//  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類(lèi)型的日期 例如 2018-12-09 00:00:00
    get set……

1.2、被賦值的JavaBean

/**
 * 作者 :HealerJean
 * 日期 :2018/12/13  上午11:03.
 * 類(lèi)描述:
 */
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類(lèi)型
get set……

2、利用反射實(shí)現(xiàn)工具類(lèi)

需要注意的是,下面的日期,在我們通過(guò)反射獲取到值的時(shí)候,它打印出來(lái)的是英文日期串,我們需要對(duì)他進(jìn)行一個(gè)轉(zhuǎn)化

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.
 * 類(lèi)描述 防止非空字段,在類(lèi)似于 new BigDecimal(string))中進(jìn)行報(bào)錯(cuò)
 */
public class JavaBeanUtil {
    /**
     *
     * @param object 原始數(shù)據(jù)JavaBean
     * @param originFieldName 原始數(shù)據(jù) 字段名字 比如:name
     * @param newObject 新復(fù)制的JavaBean
     * @param newFilldName 新賦值的字段名字 比如 nameNow
     * @param dateFormat 如果是date類(lèi)型的日期,
     *                   1、傳入的是String字符串'2018-12-09'   則需要傳入相應(yīng)Fromat格式 yyyy-MM-dd HH:mm:ss
     *                   2、如果是標(biāo)準(zhǔn)高的date類(lèi)型,那么.toString之后是 -> Fri Dec 14 19:00:07 CST 2018, 則設(shè)置為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、測(cè)試

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.
 * 類(lèi)描述:
 */
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是否非空,并給前臺(tái)報(bào)出錯(cuò)誤信息

1、工具類(lèi)

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.
 * 類(lèi)描述:判斷是否為空 或者是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);//暴力反射,獲取獲取數(shù)據(jù)
                if(field.get(object)==null){
                    //返回flase或者直接拋出異常,根據(jù)我們的情況而定
                    throw  new AppException(fieldName[i]+"不能為空");
                }
            }
            return true ;
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return false ;
    }
}

2、catch捕獲

@ApiOperation(value = "添加淘寶營(yíng)銷(xiāo)總代理",
            notes = "添加淘寶營(yíng)銷(xiāo)總代理",
            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());
        }
    }

感謝各位的閱讀!關(guān)于“JavaBean字段怎么防止非空賦值”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI