2121
2222import static capital .scalable .restdocs .constraints .ConstraintAndGroupDescriptionResolver .VALUE ;
2323import static capital .scalable .restdocs .constraints .MethodParameterValidatorConstraintResolver .CONSTRAINT_CLASS ;
24- import static capital .scalable .restdocs .i18n .SnippetTranslationResolver .translate ;
2524import static capital .scalable .restdocs .util .FormatUtil .collectionToString ;
2625import static java .util .Collections .emptyList ;
2726import static java .util .Collections .emptyMap ;
3635import java .util .Collections ;
3736import java .util .List ;
3837
38+ import capital .scalable .restdocs .i18n .SnippetTranslationResolver ;
3939import com .fasterxml .jackson .core .JsonProcessingException ;
4040import com .fasterxml .jackson .databind .ObjectMapper ;
4141import org .apache .commons .lang3 .StringUtils ;
4242import org .slf4j .Logger ;
4343import org .springframework .core .MethodParameter ;
4444import org .springframework .restdocs .constraints .Constraint ;
45+ import org .springframework .restdocs .constraints .ConstraintDescriptionResolver ;
4546import org .springframework .restdocs .constraints .ConstraintDescriptions ;
46- import org .springframework .restdocs .constraints .ResourceBundleConstraintDescriptionResolver ;
4747
4848public class ConstraintReaderImpl implements ConstraintReader {
4949
5050 private static final Logger log = getLogger (ConstraintReaderImpl .class );
5151
52- private final ConstraintAndGroupDescriptionResolver constraintDescriptionResolver ;
52+ private final ConstraintAndGroupDescriptionResolver constraintAndGroupDescriptionResolver ;
5353
5454 private final SkippableConstraintResolver skippableConstraintResolver ;
5555
5656 private final MethodParameterConstraintResolver constraintResolver ;
5757
5858 private final ObjectMapper objectMapper ;
5959
60- private ConstraintReaderImpl (MethodParameterConstraintResolver actualResolver , ObjectMapper objectMapper ) {
61- constraintDescriptionResolver = new ConstraintAndGroupDescriptionResolver (
62- new ResourceBundleConstraintDescriptionResolver ());
60+ private final SnippetTranslationResolver translationResolver ;
61+
62+ private ConstraintReaderImpl (MethodParameterConstraintResolver actualResolver , ObjectMapper objectMapper , SnippetTranslationResolver translationResolver ,
63+ ConstraintDescriptionResolver constraintDescriptionResolver ) {
64+ this .translationResolver = translationResolver ;
65+ constraintAndGroupDescriptionResolver = new ConstraintAndGroupDescriptionResolver (
66+ constraintDescriptionResolver , translationResolver );
6367 skippableConstraintResolver = new SkippableConstraintResolver (
64- actualResolver , constraintDescriptionResolver );
68+ actualResolver , constraintAndGroupDescriptionResolver );
6569 constraintResolver = new HumanReadableConstraintResolver (skippableConstraintResolver );
6670 this .objectMapper = objectMapper ;
6771 }
6872
69- public static ConstraintReaderImpl create (ObjectMapper objectMapper ) {
70- return CONSTRAINT_CLASS != null ? createWithValidation (objectMapper ) : createWithoutValidation (objectMapper );
73+ public static ConstraintReaderImpl create (ObjectMapper objectMapper , SnippetTranslationResolver translationResolver , ConstraintDescriptionResolver constraintDescriptionResolver ) {
74+ return CONSTRAINT_CLASS != null ? createWithValidation (objectMapper , translationResolver , constraintDescriptionResolver ) : createWithoutValidation (objectMapper , translationResolver , constraintDescriptionResolver );
7175 }
7276
73- static ConstraintReaderImpl createWithoutValidation (ObjectMapper objectMapper ) {
74- return new ConstraintReaderImpl (new NoOpMethodParameterConstraintResolver (), objectMapper );
77+ static ConstraintReaderImpl createWithoutValidation (ObjectMapper objectMapper , SnippetTranslationResolver translationResolver , ConstraintDescriptionResolver constraintDescriptionResolver ) {
78+ return new ConstraintReaderImpl (new NoOpMethodParameterConstraintResolver (), objectMapper , translationResolver , constraintDescriptionResolver );
7579 }
7680
77- static ConstraintReaderImpl createWithValidation (ObjectMapper objectMapper ) {
78- return new ConstraintReaderImpl (new MethodParameterValidatorConstraintResolver (), objectMapper );
81+ static ConstraintReaderImpl createWithValidation (ObjectMapper objectMapper , SnippetTranslationResolver translationResolver , ConstraintDescriptionResolver constraintDescriptionResolver ) {
82+ return new ConstraintReaderImpl (new MethodParameterValidatorConstraintResolver (), objectMapper , translationResolver , constraintDescriptionResolver );
7983 }
8084
8185 @ Override
@@ -85,7 +89,7 @@ public List<String> getOptionalMessages(Class<?> javaBaseClass, String javaField
8589
8690 @ Override
8791 public String getTypeSpecifier (Class <?> javaBaseClass ) {
88- String message = constraintDescriptionResolver .resolveDescription (
92+ String message = constraintAndGroupDescriptionResolver .resolveDescription (
8993 new Constraint (javaBaseClass .getCanonicalName (), emptyMap ()));
9094
9195 // fallback
@@ -99,7 +103,7 @@ public String getTypeSpecifier(Class<?> javaBaseClass) {
99103 @ Override
100104 public List <String > getConstraintMessages (Class <?> javaBaseClass , String javaFieldName ) {
101105 ConstraintDescriptions constraints = new ConstraintDescriptions (javaBaseClass ,
102- constraintResolver , constraintDescriptionResolver );
106+ constraintResolver , constraintAndGroupDescriptionResolver );
103107 List <String > constraintMessages = new ArrayList <>();
104108 constraintMessages .addAll (constraints .descriptionsForProperty (javaFieldName ));
105109 constraintMessages .addAll (getEnumConstraintMessage (javaBaseClass , javaFieldName ));
@@ -112,7 +116,7 @@ public List<String> getConstraintMessages(MethodParameter param) {
112116 List <String > constraintMessages = new ArrayList <>();
113117 for (Constraint constraint : constraints ) {
114118 constraintMessages .add (
115- constraintDescriptionResolver .resolveDescription (constraint ));
119+ constraintAndGroupDescriptionResolver .resolveDescription (constraint ));
116120 }
117121 constraintMessages .addAll (getEnumConstraintMessage (param ));
118122 Collections .sort (constraintMessages );
@@ -154,12 +158,12 @@ private List<String> getEnumConstraintMessage(Class<?> rawClass) {
154158
155159 String value = collectionToString (serializedEnumValues );
156160 String enumName = enumClass .getCanonicalName ();
157- String message = constraintDescriptionResolver .resolveDescription (
161+ String message = constraintAndGroupDescriptionResolver .resolveDescription (
158162 new Constraint (enumName , singletonMap (VALUE , (Object ) value )));
159163
160164 // fallback
161165 if (isBlank (message ) || message .equals (enumName )) {
162- message = translate ("constraints-enum" , value );
166+ message = translationResolver . translate ("constraints-enum" , value );
163167 }
164168 return singletonList (message );
165169 }
0 commit comments