Spring 带有自定义消息的 MVC 回滚
Spring MVC rollback with custom message
我有一个 Spring MVC 服务方法来执行 save() 和 update() - 两个操作。
save()执行成功后,如果发现要更新的用户不存在,我会手动抛出一个new RuntimeExceotion()来回滚save操作。在这种情况下,我如何 return 将错误消息 ("can't find the user") 发送到浏览器端?
@Transactional(rollbackFor = { Exception.class })
public Map<String,Object> service(){
Map<String,Object> map = new HashMap<String,Object>();
//1. save user
User user = getUser();
this.save(user);
//2. try to update another
String anotherUserId = "anUserId";
User anUser = this.getById(anotherUserId);
if(anUser != null){
anUser.setName("newName");
this.update(anUser);
map.put("status",true);
}else{
//logical error
map.put("status",false);
map.put("err_msg","cant find the user for update");
//triger rollback(rollback save user)
throw new RuntimeException("update user error");
}
return map;
}
您可以添加包含您的错误信息的 CustomException
class。
您可以将错误消息发回给您的客户端。为此,您可以使 return 类型的服务成为对象,这就是为什么它可以发送 Map
或 ErrorMessage
.
CustomException
class 看起来像这样:
public class CustomException extends Exception implements Serializable {
public CustomException(String errorMsg)
{
super(errorMsg);
}
public CustomException(Throwable cause){
super(cause);
}
public CustomException(String message ,Throwable cause){
super(message,cause);
}
}
您可以通过以下方式使用它:
throw new CustomException("Can not find the user");
为什么不将错误包装在对象中并在抛出时将其传递给异常。
稍后在 controller/request-response 处理程序层,从异常中获取错误对象并将其传递给 UI 层。
Class CustomException extends Exception {
Map<String,Object> errorMap;
public CustomException(String errorMsg, Map errorMap)
{
super(errorMsg);
this.errorMap = errorMap;
}
public CustomException(Throwable cause){
super(cause);
}
public CustomException(String message ,Throwable cause){
super(message,cause);
}
}
抛出异常时:
throw new CustomException("Can not find the user", map);
在Controller端,捕获这个异常并提取包含你的数据的ErrorMap。
Wrap/Convert 这个对象并将其传递给 UI/Browser。
我有一个 Spring MVC 服务方法来执行 save() 和 update() - 两个操作。
save()执行成功后,如果发现要更新的用户不存在,我会手动抛出一个new RuntimeExceotion()来回滚save操作。在这种情况下,我如何 return 将错误消息 ("can't find the user") 发送到浏览器端?
@Transactional(rollbackFor = { Exception.class })
public Map<String,Object> service(){
Map<String,Object> map = new HashMap<String,Object>();
//1. save user
User user = getUser();
this.save(user);
//2. try to update another
String anotherUserId = "anUserId";
User anUser = this.getById(anotherUserId);
if(anUser != null){
anUser.setName("newName");
this.update(anUser);
map.put("status",true);
}else{
//logical error
map.put("status",false);
map.put("err_msg","cant find the user for update");
//triger rollback(rollback save user)
throw new RuntimeException("update user error");
}
return map;
}
您可以添加包含您的错误信息的 CustomException
class。
您可以将错误消息发回给您的客户端。为此,您可以使 return 类型的服务成为对象,这就是为什么它可以发送 Map
或 ErrorMessage
.
CustomException
class 看起来像这样:
public class CustomException extends Exception implements Serializable {
public CustomException(String errorMsg)
{
super(errorMsg);
}
public CustomException(Throwable cause){
super(cause);
}
public CustomException(String message ,Throwable cause){
super(message,cause);
}
}
您可以通过以下方式使用它:
throw new CustomException("Can not find the user");
为什么不将错误包装在对象中并在抛出时将其传递给异常。
稍后在 controller/request-response 处理程序层,从异常中获取错误对象并将其传递给 UI 层。
Class CustomException extends Exception {
Map<String,Object> errorMap;
public CustomException(String errorMsg, Map errorMap)
{
super(errorMsg);
this.errorMap = errorMap;
}
public CustomException(Throwable cause){
super(cause);
}
public CustomException(String message ,Throwable cause){
super(message,cause);
}
}
抛出异常时:
throw new CustomException("Can not find the user", map);
在Controller端,捕获这个异常并提取包含你的数据的ErrorMap。 Wrap/Convert 这个对象并将其传递给 UI/Browser。