Following example shows how to return XML error response from our custom ErrorController .
Example
Our Custom ErrorController
@Controller
public class MyCustomErrorController extends AbstractErrorController {
public MyCustomErrorController(ErrorAttributes errorAttributes) {
super(errorAttributes);
}
@RequestMapping(value = "/error", produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public Error handleError(HttpServletRequest request) {
Map<String, Object> errorAttributes = super.getErrorAttributes(request, true);
List<Attribute> attributes = new ArrayList<>();
errorAttributes.forEach((key, value) -> {
Attribute attribute = new Attribute();
attribute.setKey(key);
attribute.setValue(value == null ? "" : value.toString());
attributes.add(attribute);
});
Error error = new Error();
error.setAttributeList(attributes);
return error;
}
@Override
public String getErrorPath() {
return "/error";
}
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Error {
@XmlElement(name="attribute")
private List<Attribute> attributeList;
.............
}
@XmlRootElement
public class Attribute {
private String key;
private String value;
.............
}
An application Controller
@Controller
public class MyAppController {
@RequestMapping("/")
public void handleRequest() {
throw new RuntimeException("test exception");
}
}
Boot main class
@SpringBootApplication
public class SpringBootMain{
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class);
}
}
Output
Example ProjectDependencies and Technologies Used: - Spring Boot 2.0.0.RELEASE
Corresponding Spring Version 5.0.4.RELEASE - spring-boot-starter-web : Starter for building web, including RESTful, applications using Spring
MVC. Uses Tomcat as the default embedded container.
- JDK 1.8
- Maven 3.3.9
|