Javax模式验证打印带有转义反斜杠的消息



我使用javax@Pattern注释来验证字段。我使用双反斜杠来转义反斜杠字符:

@Pattern(regexp="^\+[1-9]\d{1,14}$", message = "must match format {regexp}")
private String phoneNo;

我得到的信息是:

must match format ^\+[1-9]\d{1,14}$

为什么返回的消息有双反斜杠?它们只是用来逃避角色。这对用户来说没有意义。我希望信息是:

must match format ^+[1-9]d{1,14}$

我知道我可以设置特定的消息,但我想使用{regexp}参数。

I您可以尝试编写自定义MessageInterpolator

public class MessageInterpolatorImpl implements MessageInterpolator {
private final MessageInterpolator origin;
public MessageInterpolatorImpl(MessageInterpolator origin) {
this.origin = origin;
}
@Override
public String interpolate(String messageTemplate, Context context) {
return interpolate(messageTemplate, context, Locale.getDefault());
}
@Override
public String interpolate(String messageTemplate, Context context, Locale locale) {
String newMessageTemplate = messageTemplate;
if (context.getConstraintDescriptor().getAnnotation() instanceof Pattern pattern) {
String normalizedPattern = java.util.regex.Pattern.compile(pattern.regexp()).toString();
newMessageTemplate = messageTemplate.replaceAll("\{regexp}", normalizedPattern);
}
return origin.interpolate(
newMessageTemplate,
context,
locale
);
}
}
...
@Configuration
class Config {
@Autowired
public void tuneValidator(LocalValidatorFactoryBean validatorFactory) {
MessageInterpolator origin = validatorFactory.getMessageInterpolator();
validatorFactory.setMessageInterpolator(new MessageInterpolatorImpl(origin));
}
}

相关内容

  • 没有找到相关文章

最新更新