[英]Spring Boot Validation : coming as {1} in error message
尝试使用Spring Boot在REST API中归档以下内容,
@Size(min = 4,message =“ Size.foo.name”)
私有字符串名称;
errorMessages.properties
Size.foo.name =名称字段必须超过{1}个字符
码
> @ControllerAdvice
@PropertySource("classpath:errorMessages.properties")
public class RestExceptionHandler
{
@Autowired
private Environment environment;
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public @ResponseBody ErrorDetail handleValidationError(MethodArgumentNotValidException manve, HttpServletRequest request) {
List<FieldError> fieldErrors = manve.getBindingResult().getFieldErrors();
for(FieldError fieldError : fieldErrors) {
System.out.println(environment.getProperty(fieldError.getDefaultMessage())); //This prints Name field must be more than {1} characters
}
}
}
有没有一种方法可以打印下面的实际最小大小(4)并发送给用户,或者我是否需要在类中进行更多配置更改?
名称字段必须超过4个字符
我想我知道会发生什么。 您只需检索message属性。 该消息未评估。
您在这里需要一个MessageSource并将FieldError传递给消息源以获取消息。
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="ValidationMessages"/>
</bean>
然后将源自动连接到控制器中
@Autowired
private MessageSource messageSource;
要获取您的消息,请执行以下操作
for (Object object : bindingResult.getAllErrors()) {
if(object instanceof FieldError) {
FieldError fieldError = (FieldError) object;
/**
* Use null as second parameter if you do not use i18n (internationalization) or Locale to be specified if you need localized one
*/
String message = messageSource.getMessage(fieldError, null);
}
}
从这里获得了代码示例
将“最小值”更改为“最大值”,“最小值”表示最小大小为4。“最大值”表示最大大小约为20或您想要的任何值。
您键入@Size(min = 4,message =“ Size.foo.name”)
私有字符串名称;
因此您必须输入4个或更多字符。 如果您接受的最大值大于其上限。 例如,如果max = 20,那么您最多可以输入20个字符。 并且min是下限,因此您必须输入至少4个字符。
这是解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.