我想在浏览器中显示Controller返回的ResponseEntity的主体(使用Spring):
return new ResponseEntity<>(l.getReachableDate(), HttpStatus.NOT_FOUND);
l.getReachableDate()
返回Date类型,我希望以类似的方式显示它:
<header>
<h1><span>Url is not reachable from</span> <!-- body --> </h1>
</header>
如何展示它?
答案 0 :(得分:2)
我仍然不明白你为什么要这样做,但这种方式应该可行
@RequestMapping(value="/controller", method=GET)
public ResponseEntity<String> foo() {
String content =
"<header>"
+ "<h1><span>Url is not reachable from</span>" + l.getReachableDate() + "</h1>"
+ "</header>";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_HTML);
return new ResponseEntity<String>(content, responseHeaders, HttpStatus.NOT_FOUND);
}
经过一些评论......
不是将用户重定向到资源未找到的页面,最好有ResourceNotFoundRuntimeException
(扩展RuntimeException)并注册MVC异常处理程序(这是prem kumar建议的,但不是自定义异常html文本):
public class ResourceNotFoundRuntimeException extends RuntimeException{
...
}
处理程序:
@ControllerAdvice
public class ExceptionHandlerController {
@ExceptionHandler(ResourceNotFoundRuntimeException .class)
public ResponseEntity<String> resourceNotFoundRuntimeExceptionHandling(){
String content =
"<header>"
+ "<h1><span>Url is not reachable from</span>" + l.getReachableDate() + "</h1>"
+ "</header>";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_HTML);
return new ResponseEntity<String>(content, responseHeaders, HttpStatus.NOT_FOUND);
}
}
答案 1 :(得分:1)
如果你想使用spring从服务器端获取整个主体,那么你可以抛出一个自定义的ResourceNotFoundException并使用spring异常处理程序来处理它。
检查以下链接:
https://stackoverflow.com/a/21115267/5039001
以下链接为您提供了不同的方法。
https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
如果你想为不同的url使用不同的主体,那么你可以在ResourceNotFoundException中拥有一个属性html主体,并将主体作为构造函数参数传递并抛出异常。在异常处理程序中,您可以检索此正文并构建http响应消息。
public class ResourceNotFoundException extends RuntimeException{
private String htmlBody;
public ResourceNotFoundException(String htmlBody){
//super(...)
this.htmlBody = htmlBody;
}
}
您现在可以全局重用此异常。请注意,您需要为此异常设置相应的异常处理程序,您可以访问上述共享链接。