“屎山”代码如何优化——控制层接收参数篇

在一次偶然的机会,写出了一个“屎山”代码,秉着严谨的态度(看着实在不舒服),尝试了一下优化,并用博客记录一波

1. 优化前

@PostMapping("/confirmUserAddress")
public Map<String,Object> confirmUserAddress(
        boolean checked,
        String city,
        String detail,
        String district,
        String iphone,
        String province,
        String realName
    ){

        Map<String,Object> map = new HashMap<>(6);
        UserAddress userAddress = new UserAddress();
        userAddress.setUid(LocalUser.getUser().getUid());
        userAddress.setRealName(realName);
        userAddress.setPhone(iphone);
        userAddress.setProvince(province);
        userAddress.setCity(city);
        userAddress.setDistrict(district);
        userAddress.setDetail(detail);
        userAddress.setIsDefault(checked==true?1:0);
        userAddress.setIsDel(0);
        userAddress.setCreateTime(new Date());
        ......
        return map;
}

2. 优化后

 @PostMapping("/confirmUserAddress")
 public Map<String,Object> confirmUserAddress(@RequestBody UserAddressParam userAddressParam){
        Map<String,Object> map = new HashMap<>(6);
        UserAddress userAddress = new UserAddress();
        if(!ObjectUtils.isEmpty(userAddressParam)) {
            BeanUtils.copyProperties(userAddressParam,userAddress);
        }
        userAddress.setUid(LocalUser.getUser().getUid());
        ......
        return map;
}

3. 优化方案<BeanUtils.copyProperties>

package org.springframework.beans;
.......
/**
注解为:spring源码英文注解翻译后结果
将给定源 bean 的属性值复制到目标 bean 中。
注意:只要属性匹配,源类和目标类不必匹配,甚至可以从彼此派生。 源 bean 公开但目标 bean 没有公开的任何 bean 属性都将被静默忽略。
这只是一种方便的方法。 对于更复杂的传输需求,请考虑使用完整的 BeanWrapper。

参数:
source – 源 bean
target – 目标 bean
抛出:
BeansException – 如果复制失败
**/
public static void copyProperties(Object source, Object target) throws BeansException {
		copyProperties(source, target, null, (String[]) null);
}

/**
* @param editable the class (or interface) to restrict property setting
*  将属性设置限制为的类(或接口)
**/
public static void copyProperties(Object source, Object target, Class<?> editable) throws BeansException {
	copyProperties(source, target, editable, (String[]) null);
}

如果在copy对象的过程中需要忽略某个实体类属性,可以调用下列方法:

package org.springframework.beans;
/**
将给定源 bean 的属性值复制到给定目标 bean 中,忽略给定的“ignoreProperties”。
注意:只要属性匹配,源类和目标类不必匹配,甚至可以从彼此派生。 源 bean 公开但目标 bean 没有公开的任何 bean 属性都将被静默忽略。
这只是一种方便的方法。 对于更复杂的传输需求,请考虑使用完整的 BeanWrapper
**/
.......
public static void copyProperties(Object source, Object target, String... ignoreProperties) throws BeansException {
		copyProperties(source, target, null, ignoreProperties);
}

4. 后言

拒绝屎山代码~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值