पर आधारित JSON या HTML प्रतिक्रिया की सेवा के लिए @ExceptionHandler का उपयोग करना मेरे नियंत्रक के पास उनके @RequestMapping (उत्पादन = "", उपभोग = "") एनोटेशन के आधार पर JSON या HTML उत्पन्न करने के तरीके हैं। हालांकि जब एक सामान्य तरीके से अपवादों को संभालने की बात आती है, तो मुझे समस्याओं का सामना करना पड़ रहा है।@RequestMapping
@RequestMapping(method = POST)
public String add(@Valid MyForm form, BindingResult result, Model model) {
if (result.hasErrors()) {
return "edit";
}
throw new RuntimeException("Error adding");
return "edit";
}
@RequestMapping(method = POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public Map<String, Object> addJSON(@RequestBody @Valid MyForm form, Model model) {
throw new RuntimeException("Error adding");
}
मैं उपरोक्त दो तरीकों के लिए @ExceptionHandler कैसे लिखूं? गैर-JSON के लिए एक को Model
में एक विशेषता जोड़नी चाहिए।
model.addAttribute("error", exception.getMessage());
JSON उत्तर प्रकार के साथ एक, एक Map
के रूप में त्रुटि वापस चाहिए बाद में JSON में श्रृंखलाबद्ध किया जाना है।
मैंने नीचे की कोशिश की लेकिन वसंत को दो अलग-अलग @ExceptionHandler एनोटेटेड विधियों को एक ही अपवाद प्रकार के साथ घोषित नहीं किया गया है।
@ExceptionHandler(RuntimeException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@RequestMapping(produces = "application/json")
@ResponseBody
public Map<String, Object> handleExceptionAsJSON(RuntimeException exception) {
Map<String, Object> map = new HashMap<>();
map.put("error", exception.getMessage());
return map;
}
@ExceptionHandler(RuntimeException.class)
public Map<String, Object> handleException(RuntimeException exception) {
Map<String, Object> map = new HashMap<>();
map.put("error", exception.getMessage());
return map;
}
"अपवाद हैडलर को फेंकने योग्य तर्क के खिलाफ मैप किया गया है। इसलिए, आपके मामले में केवल 1 अपवादक सम्मानित है।" - वह सत्य नहीं है! – adarshr
मैंने ऊपर अपनी पहली पंक्ति संशोधित की। यदि आप मुझ पर विश्वास नहीं करते हैं, तो कृपया 'ExceptionHandlerMethodResolver' के ** पंक्ति 71 ** (detectExceptionMappings विधि) की जांच करें। वसंत 3.2.x रास्ते से मेरा संदर्भ है। – ramirezag