Запрос закрывается после любого отката, произошедшего на уровне сервиса. Он не продолжается с контроллера.
например:
public Class UserController {
@Autowired
UserService userService;
createUserList(List < User > list) {
try {
RespObj obj=new RespObj();
List < Obj > errorList = new ArrayList();
for (User user: list) {
Object obj = userService.createUser(user);
errorList.add(obj);
}
//return success response along with any errorlist
obj.setStatus(200);
obj.setObj(errorList);
return obj;
} catch (Exception e) {
//returning error response
obj.setStatus(400);
obj.setObj(e.getMessage());
return obj;
}
}
}
// UserServiceImpl
public class UserServiceImpl implements UserService {
@Transactional
Object createUser(user) {
try {
dao.saveUser(user);
} catch (Exception e) {
//create error pojo
}
// return error pojo if any
}
}
В приведенном выше коде, если создание одного пользователя завершилось неудачно, откат происходит только для этого пользователя, и после этого оставшиеся объекты пользователя не обрабатываются.
Требование: оставить один сбой и необходимо обработать оставшиеся пользовательские объекты, которые не были обработаны.