Maison >Périphériques technologiques >IA >Aujourd'hui, nous utilisons l'IA pour créer une interface permettant d'éviter la soumission répétée d'annotations.
Bonjour à tous, je suis incroyable.
Que l'interface soit appelée une ou plusieurs fois, l'idempotence de l'interface garantit que les opérations sur la même ressource ne produiront que le même résultat. Les appels répétés à la même demande d'interface doivent avoir les mêmes résultats qu'une seule demande et ne doivent pas provoquer d'incohérence ou d'effets secondaires.
Aujourd'hui, nous avons utilisé l'intelligence artificielle pour créer une annotation personnalisée afin d'éviter que l'interface ne soit demandée plusieurs fois en 30 secondes, et avons utilisé Redis comme cache.
Sans plus attendre, il suffit de demander :
.
@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;RepeatSubmit annotation = handlerMethod.getMethodAnnotation(RepeatSubmit.class);if (annotation != null && annotation.enable()) {String key = buildKey(request);if (StringUtils.hasText(redisTemplate.opsForValue().get(key))) {response.getWriter().write("repeat request, please try again later!");return false;} else {redisTemplate.opsForValue().set(key, Arrays.toString(request.getInputStream().readAllBytes()), annotation.timeout(), TimeUnit.SECONDS);}}}return true;} //创建redis 缓存keyprivate String buildKey(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {String key = useRequestMD5 ? hashRequest(request) : request.getRequestURI();return "repeat-submit:" + key;} //对请求做hash运算private String hashRequest(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {byte[] hashBytes = MessageDigest.getInstance("MD5").digest(request.getInputStream().readAllBytes());StringBuilder sb = new StringBuilder();for (byte b : hashBytes) {sb.append(String.format("%02x", b));}return sb.toString();}3. Enregistrez l'intercepteur
#🎜 🎜#
Ce qui précède est le code le plus critique.
Connectez-vous à Redis
spring:data:redis:host: 127.0.0.1 port: 6379
Annotations d'utilisation de l'interface
@RestControllerpublic class RepeatTestController {@RepeatSubmit@GetMapping("/hello/mono1")public Mono<string> mono(){return Mono.just("Hello Mono -Java North");}@RepeatSubmit@PostMapping ("/hello/mono1")public Mono<string> mono1(@RequestBody User user){return Mono.just("Hello Mono -Java North-"+user.getName());}}</string></string>
# 🎜 🎜#
Test de l'interface locale : les requêtes répétées dans les 30 secondes devront être interceptées directement
La CLÉ mise en cache dans Redis est la suivante :
Le le code correspondant se trouve à la fin de l'article, si nécessaire, vous pouvez avoir des relations sexuelles gratuitement !
Interrogons-nous sur la solution d'idempotence d'interface,
#🎜 🎜##🎜🎜 #
Que pensez-vous de cette réponse ? Liens de codes associés, bienvenue sur :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!