@@ -103,7 +103,7 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
103103
104104 private final RequestConditionHolder customConditionHolder ;
105105
106- private final int hashCode ;
106+ private @ Nullable Integer hashCode ;
107107
108108 private final BuilderConfiguration options ;
109109
@@ -162,6 +162,21 @@ private RequestMappingInfo(@Nullable String name,
162162 ProducesRequestCondition producesCondition , RequestConditionHolder customCondition ,
163163 BuilderConfiguration options ) {
164164
165+ this (name , pathPatternsCondition , patternsCondition ,
166+ methodsCondition , paramsCondition , headersCondition ,
167+ consumesCondition , producesCondition ,
168+ customCondition , options , true );
169+ }
170+
171+ private RequestMappingInfo (@ Nullable String name ,
172+ @ Nullable PathPatternsRequestCondition pathPatternsCondition ,
173+ @ Nullable PatternsRequestCondition patternsCondition ,
174+ RequestMethodsRequestCondition methodsCondition , ParamsRequestCondition paramsCondition ,
175+ HeadersRequestCondition headersCondition , ConsumesRequestCondition consumesCondition ,
176+ ProducesRequestCondition producesCondition ,
177+ RequestConditionHolder customCondition , BuilderConfiguration options ,
178+ boolean calculateHashCode ) {
179+
165180 Assert .isTrue (pathPatternsCondition != null || patternsCondition != null ,
166181 "Neither PathPatterns nor String patterns condition" );
167182
@@ -176,10 +191,9 @@ private RequestMappingInfo(@Nullable String name,
176191 this .customConditionHolder = customCondition ;
177192 this .options = options ;
178193
179- this .hashCode = calculateHashCode (
180- this .pathPatternsCondition , this .patternsCondition ,
181- this .methodsCondition , this .paramsCondition , this .headersCondition ,
182- this .consumesCondition , this .producesCondition , this .customConditionHolder );
194+ if (calculateHashCode ) {
195+ this .hashCode = calculateHashCode ();
196+ }
183197 }
184198
185199
@@ -421,7 +435,7 @@ public RequestMappingInfo getMatchingCondition(HttpServletRequest request) {
421435 return null ;
422436 }
423437 return new RequestMappingInfo (this .name , pathPatterns , patterns ,
424- methods , params , headers , consumes , produces , custom , this .options );
438+ methods , params , headers , consumes , produces , custom , this .options , false );
425439 }
426440
427441 /**
@@ -487,19 +501,19 @@ public boolean equals(@Nullable Object other) {
487501
488502 @ Override
489503 public int hashCode () {
504+ if (this .hashCode == null ) {
505+ this .hashCode = calculateHashCode ();
506+ }
490507 return this .hashCode ;
491508 }
492509
493510 @ SuppressWarnings ({"ConstantConditions" , "NullAway" })
494- private static int calculateHashCode (
495- @ Nullable PathPatternsRequestCondition pathPatterns , @ Nullable PatternsRequestCondition patterns ,
496- RequestMethodsRequestCondition methods , ParamsRequestCondition params , HeadersRequestCondition headers ,
497- ConsumesRequestCondition consumes , ProducesRequestCondition produces , RequestConditionHolder custom ) {
498-
499- return (pathPatterns != null ? pathPatterns : patterns ).hashCode () * 31 +
500- methods .hashCode () + params .hashCode () +
501- headers .hashCode () + consumes .hashCode () + produces .hashCode () +
502- custom .hashCode ();
511+ private int calculateHashCode () {
512+ return (this .pathPatternsCondition != null ? this .pathPatternsCondition : this .patternsCondition ).hashCode () * 31 +
513+ this .methodsCondition .hashCode () +
514+ this .paramsCondition .hashCode () + this .headersCondition .hashCode () +
515+ this .consumesCondition .hashCode () + this .producesCondition .hashCode () +
516+ this .customConditionHolder .hashCode ();
503517 }
504518
505519 @ Override
0 commit comments