我收到来自html格式的外部服务的回复,并将其直接传递给我的前端。但是,有时外部系统会返回损坏的html,这会导致我网站上的页面损坏。因此,我想验证这个HTML响应是否已损坏或有效。如果它有效,我将进一步传递,否则将在日志中忽略它。
我可以通过什么方式在Java中对后端进行验证 ?
谢谢。
答案 0 :(得分:1)
我相信Java中没有这样的“通用”东西。但您可以使用任何一个Open Source HTML Parser
构建自己的解析器来验证HTML答案 1 :(得分:0)
我找到了解决方案:
private static boolean isValidHtml(String htmlToValidate) throws ParserConfigurationException,
SAXException, IOException {
String docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " +
"\"https://www.w3.org/TR/xhtml11/DTD/xhtml11-flat.dtd\"> " +
"<html xmlns=\"http://www.w3.org/1999/xhtml\" " + "xml:lang=\"en\">\n";
try {
InputSource inputSource = new InputSource(new StringReader(docType + htmlToValidate));
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
builder.setErrorHandler(new ErrorHandler() {
@Override
public void error(SAXParseException exception) throws SAXException {
throw new SAXException(exception);
}
@Override
public void fatalError(SAXParseException exception) throws SAXException {
throw new SAXException(exception);
}
@Override
public void warning(SAXParseException exception) throws SAXException {
throw new SAXException(exception);
}
});
builder.parse(inputSource);
} catch (SAXException ex) {
//log.error(ex.getMessage(), ex); // validation message
return false;
}
return true;
}
这种方法可以这样使用:
String htmlToValidate = "<head><title></title></head><body></body></html>";
boolean isValidHtml = isValidHtml(htmlToValidate);