是否可以从运行在AEM中的Sling servlet直接返回带有自定义内容的HTTP错误响应?
背景
有一个Slingservlet,用于处理使用POST方法发送的表单。
@SlingServlet(
methods = HttpConstants.METHOD_POST,
resourceTypes = NameConstants.NT_PAGE,
selectors = SELECTOR)
public class MyServlet extends SlingAllMethodsServlet {
//...
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
//if something is wrong with the request
Gson gson = new Gson();
gson.toJson(errorResponse, response.getWriter());
response.setContentType(MediaType.JSON_UTF_8.toString());
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
//...
}
//...
}
当它返回HTTP400BadRequest时,我想获得在servlet中创建的JSON响应。相反,AEM返回一个HTML页面,该页面是用/apps/sling/servlet/errorhandler生成的,只是在内容的开头添加了JSON。
{"errors":["The provided value is incorrect"]}
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>400 Bad Request</title></head>
<body>
<h1>400 Bad Request</h1>
<p>Cannot serve request to on this server.</p>
(...)
</body>
</html>
我知道可以创建自定义错误页面。问题是,我需要servlet中的验证错误来创建有意义的错误响应。
AEM版本:6.5