Closed NikitaShchienko closed 4 years ago
Do not apply messages from messages.properties
messages.properties
TestCurrencyClassConstraint
@Constraint(validatedBy = TestCurrencyValidator.class) @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface TestCurrencyClassConstraint { String message() default "{msg://io.jmix.samples.rest.validation/TestCurrencyClassConstraint.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
TestCurrencyValidator
public class TestCurrencyValidator implements ConstraintValidator<TestCurrencyClassConstraint, Currency> { @Override public boolean isValid(Currency currency, ConstraintValidatorContext context) { EntityStates entityStates = AppBeans.get(EntityStates.NAME); if (entityStates.isLoaded(currency, "code")) { if ("BAN".equals(currency.getCode())) { return false; } } return true; } }
Test:
@Test public void commitInvalidClassLevelValidators() throws Exception { String json = getFileContent("currency-invalid-code-ban.json", null); String url = baseUrl + "/entities/ref$Currency"; try (CloseableHttpResponse response = sendPost(url, oauthToken, json, null)) { assertEquals(HttpStatus.SC_BAD_REQUEST, statusCode(response)); ReadContext ctx = parseResponse(response); assertEquals("Invalid currency", ctx.read("$[0].message")); assertEquals("", ctx.read("$[0].path")); } }
messages.properties: TestCurrencyClassConstraint.message = Invalid currency
TestCurrencyClassConstraint.message = Invalid currency
Result: Expected: Invalid currency Actual: {msg://io.jmix.samples.rest.validation/TestCurrencyClassConstraint.message}
Do not apply messages from
messages.properties
TestCurrencyClassConstraint
TestCurrencyValidator
Test:
messages.properties:
TestCurrencyClassConstraint.message = Invalid currency
Result: Expected: Invalid currency Actual: {msg://io.jmix.samples.rest.validation/TestCurrencyClassConstraint.message}