对于@Column(unique = true,message="用户名唯一")的错误信息不能通过@PostMapping("/register") public String register(@Valid Users users, BindingResult result, Model model) { if(result.hasErrors()) { model.addAttribute("msg", "注册失败!"); return "visitor/register"; } //设置用户类型和年龄,并添加用户 users.setUserType("普通用户"); users.setAge(users.getAge()); userService.register(users); //注册完直接跳转到登录好的用户主页上 Users user = userService.findByUserName(users.getUserName()); session.setAttribute("users", user); Log log = new Log(users, "用户注册"); logService.addLog(log); model.addAttribute("msg", "注册成功!"); model.addAttribute("users", user); return "include/home"; }返回吗,怎么样才能使message="用户名唯一"的结果通过result.hasErrors()返回
时间: 2023-07-19 10:09:58 浏览: 82
基于java的房地产销售管理系统的开题报告.docx
对于 `@Column(unique = true)` 注解的唯一性约束异常信息是无法直接通过 `BindingResult` 返回的,因为它是由数据库抛出的异常。
解决这个问题的方法是,自定义一个 `HandlerExceptionResolver`,用于处理全局异常。在这个异常处理器中,我们可以捕获到唯一性约束异常,并将异常信息封装成 `FieldError` 对象,然后添加到 `BindingResult` 中,从而使其能够通过 `result.hasErrors()` 返回。
以下是一个简单的示例:
```java
@ControllerAdvice
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
if (ex instanceof DataIntegrityViolationException) {
String errorMessage = "用户名已存在,请重新输入!";
FieldError fieldError = new FieldError("user", "userName", errorMessage);
BindingResult bindingResult = new BeanPropertyBindingResult(user, "user");
bindingResult.addError(fieldError);
return new ModelAndView("register", bindingResult.getModel());
}
return null;
}
}
```
在上面的代码中,我们通过 `DataIntegrityViolationException` 捕获唯一性约束异常,然后创建一个 `FieldError` 对象,并将其添加到 `BindingResult` 中。最后,我们将这个 `BindingResult` 对象作为参数创建一个新的 `ModelAndView` 对象,然后返回到前端页面。
需要注意的是,在上面的代码中,我们使用了 `@ControllerAdvice` 注解来标记这个类是一个全局异常处理器,同时也需要在 Spring 配置文件中开启:
```xml
<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
<property name="exceptionResolvers">
<list>
<bean class="com.example.CustomExceptionHandler"/>
</list>
</property>
</bean>
```
上面的配置中,我们将 `CustomExceptionHandler` 添加到了异常处理器列表中。这样,当发生异常时,就会优先使用我们自定义的异常处理器来处理异常。
阅读全文