ورود

View Full Version : java.lang.Exception



خورشید *ستاره
چهارشنبه 01 شهریور 1396, 10:37 صبح
سلام
برای تعریف کاربرجدید کدی نوشتم و زمانی که اسم تکراری میدم خطای زیر رو نمایش میده به همراه پیغام
انجام عملیات با خطا مواجه شد (java.lang.Exception: نام کاربر تکراری است)
علت چی میتونه باشه؟



@RequestMapping(method = RequestMethod.POST)
public
@ResponseBody
ModelAndView createUser(@ModelAttribute("user") User user, @RequestParam("userProfiles1") Long userProfiles1,
ModelAndView model) {
String view = "user";
try {
Set<UserProfile> userProfiles = new HashSet<UserProfile>();
UserProfile userProfile = new UserProfile();
userProfile.setId(userProfiles1);
userProfiles.add(userProfile);
user.setUserProfiles(userProfiles);
userService.saveUser(user);
} catch (Exception e) {

userProfileList = userService.getAllUserProfiles();
if (e instanceof ConstraintViolationException ) {
String result = messageSource.getMessage("error.repeated_username", null, "",
LocaleContextHolder.getLocale());
throw new CRUDException(view, new Exception(result));
} else {
throw new CRUDException(view, e);

}

}

model.setViewName(view);
return model;
}

vahid-p
چهارشنبه 01 شهریور 1396, 11:25 صبح
خب حتما این فیلد در پایگاه دادتون Unique هست و در نتیجه اگر بخواید نام تکراری ایجاد کنید Exception میده. همین ConstraintViolationException به این معنی که یکی از شرایط نقض شده. شما اومدید در خط 14 این رو catch کردید، بعد دوباره پایینترش نوعش رو مشخص کردید و دوباره throw new Exception کردید (حالا اینجا CRUDException). پس طبیعی در صورت نقض شرایط باز یک CRUDException ایجاد میشه و توضیحاتشم که نوشتید error.repeated_username . هر چند " و " دو طرف این متغیر رو متوجه نشدم.

خورشید *ستاره
چهارشنبه 01 شهریور 1396, 11:31 صبح
سپاس از شما
بله درسته همچین کاربری در پایگاه داده هست ولی پیغام من همراه با
java.lang.Exception: این کد چاپ میشه ؟

و دابل کوتیشن ها رو گذاشتم که مثل fmt:message عمل کنه درواقع کلمه فارسی نداشته باشم تو کدم

vahid-p
چهارشنبه 01 شهریور 1396, 16:02 عصر
منظورتون اینه چرا java.lang.Exception ایجاد میکنه نه یک Exception دیگه؟ شاید به خاطر اینه که شما در throw کردن CRUDException اومدید یک new Exception() کردید.

در کل این طرز کد نویسی صحیح نیست و اینقدر Exception تو Exception شده. همچنین Exception فقط یک String نیست و اطلاعات بیشتری رو همراش داره یکیش همین نوع Exception هست و بسته به نوع catch کردنش برخی از این اطلاعات نمایش داده میشه. از اونجایی که شما Exception رو throw کردید و احتمالا جای دیگه ای catch نکردید وقتی به خود main میرسه و میره بالاتر خود jvm اون رو میگیره و بخشی از اطلاعاتش رو نمایش میده. مثل nullpointerexception که اگر catch نکنید خود jvm میگیره و trace شدش و خیلی اطلاعات دیگه رو تو خروجی نمایش میده.

به هر حال من دقیقا متوجه نشدم، الان مشکل شما با این کد چیه و انتظار داشتید چه خروجی بده؟!

خورشید *ستاره
چهارشنبه 22 شهریور 1396, 09:05 صبح
مشکل حل شد. سپاس

@ExceptionHandler(CRUDException.class)
public ModelAndView handleCustomException(CRUDException ex) {
ModelAndView model = new ModelAndView(ex.getMessage());
String errorMessage = messageSource.getMessage("crud_failed", null, "Success message",
LocaleContextHolder.getLocale());
model.addObject("errorMessage", errorMessage);
model.addObject("errorCouse", ex.getCause().getMessage());
return model;
}