什么是接口的幂等性,如何实现接口幂等性?( 三 )

3.5 配置拦截器以及redis配置webConfig,添加拦截器
@Configurationpublic class WebConfig implements WebMvcConfigurer {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(apiIdempotentInterceptor());    }    @Bean    public ApiIdempotentInterceptor apiIdempotentInterceptor() {        return new ApiIdempotentInterceptor();    }}配置redis,使得中文可以正常传输
@Configurationpublic class RedisConfig {    //自定义的redistemplate    @Bean(name = "redisTemplate")    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){        //创建一个RedisTemplate对象,为了方便返回key为string,value为Object        RedisTemplate<String,Object> template = new RedisTemplate<>();        template.setConnectionFactory(factory);        //设置json序列化配置        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new                Jackson2JsonRedisSerializer(Object.class);        ObjectMApper objectMapper=new ObjectMapper();        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance);        //string的序列化        StringRedisSerializer stringRedisSerializer=new StringRedisSerializer();        //key采用string的序列化方式        template.setKeySerializer(stringRedisSerializer);        //value采用jackson的序列化方式        template.setValueSerializer(jackson2JsonRedisSerializer);        //hashkey采用string的序列化方式        template.setHashKeySerializer(stringRedisSerializer);        //hashvalue采用jackson的序列化方式        template.setHashValueSerializer(jackson2JsonRedisSerializer);        template.afterPropertiesSet();        return template;    }}最后是controller
@RestController@RequestMapping("/token")public class TokenController {    @Autowired    private TokenService tokenService;    @GetMapping    public Response token(){        return tokenService.createToken();    }    @PostMapping("checktoken")    public Response checktoken(HttpServletRequest request){        return tokenService.checkToken(request);    }}(四)结果验证首先通过token接口创建一个token出来,此时redis中也存在了该token

什么是接口的幂等性,如何实现接口幂等性?

文章插图
 
在jmeter中同时运行50个请求,我们可以观察到,只有第一个请求校验成功,后续的请求均提示请勿重复操作 。
什么是接口的幂等性,如何实现接口幂等性?

文章插图
 

什么是接口的幂等性,如何实现接口幂等性?

文章插图
 




推荐阅读