尝试使用spring boot在REST API中存档,
@Size(分钟= 4,消息=" Size.foo.name&#34)
私人字符串名称;
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个字符
答案 0 :(得分:0)
我想我明白会发生什么。您只需检索邮件属性。邮件未被评估。
您需要一个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);
}
}
从here
获取代码示例答案 1 :(得分:0)
将最小值更改为最大值,最小值表示最小值为4.最大值表示最大值大约为20或任何您想要的值。
您输入 @Size(分钟= 4,消息= “Size.foo.name”)
私人字符串名称;
所以你必须输入超过4个字符或相等。 如果你取最大值而不是它的最高界限。比如,如果max = 20,则输入最多20个字符。 这里min是下限,所以你必须输入最少4个字符。
这是解决方案