通过重构代码,将发送短信验证码和手机验证码的重复功能分为3步,生成验证码,保存验证码,发送验证码,保存验证码再方式上面都一样,其他两种再分别调用不同的参数。再controller层中,使用Map集合的方式,因为实现方法命名规则只有前面不同所以可以用来判断是哪一个请求。
在实现总接口的实现类里面加上
@Component(“imageCodeProcessor”)
@Component(“smsCodeProcessor”)
注解,然后会将实现了这个接口的实现类,add进Map中,
@Autowired
private Map<String,ValidateCodeProcessor> validateCodeProcessorMap;
//add("imageCodeProcessor")
//add("smsCodeProcessor")
// /code/image
// /code/sms
然后我们可以动态获取参数,来判断是哪一个请求。
@GetMapping("/code/{type}")//动态拼接参数
方法参数中加入
@PathVariable String type
//拿到type+CodeProcess为键的,实现了ValidateCodeProcessor接口的对象
validateCodeProcessorMap.get(type+"CodeProcessor").create(new ServletWebRequest(request),response);