@ControllerAdvice类是RestResponseEntityExceptionHandler.java。
@ControllerAdvice
public class RestResponseEntityExceptionHandler
extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { IllegalArgumentException.class, IllegalStateException.class })
protected ResponseEntity<Object> handleConflict(
RuntimeException ex, WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse,
new HttpHeaders(), HttpStatus.CONFLICT, request);
}
}
我被告知,默认情况下spring boot应该返回如下所示的内容
{
"timestamp": 1436442596410,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/item"
}
我给它的不存在的路径是
http://localhost:8080/Assignment2C/breweriessdfsdf
<!doctype html>
<html lang="en">
<head>
<title>HTTP Status 404 – Not Found</title>
<style type="text/css">
h1 {
font-family: Tahoma, Arial, sans-serif;
color: white;
background-color: #525D76;
font-size: 22px;
}
h2 {
font-family: Tahoma, Arial, sans-serif;
color: white;
background-color: #525D76;
font-size: 16px;
}
h3 {
font-family: Tahoma, Arial, sans-serif;
color: white;
background-color: #525D76;
font-size: 14px;
}
body {
font-family: Tahoma, Arial, sans-serif;
color: black;
background-color: white;
}
b {
font-family: Tahoma, Arial, sans-serif;
color: white;
background-color: #525D76;
}
p {
font-family: Tahoma, Arial, sans-serif;
background: white;
color: black;
font-size: 12px;
}
a {
color: black;
}
a.name {
color: black;
}
.line {
height: 1px;
background-color: #525D76;
border: none;
}
</style>
</head>
<body>
<h1>HTTP Status 404 – Not Found</h1>
<hr class="line" />
<p><b>Type</b> Status Report</p>
<p><b>Description</b> The origin server did not find a current representation for the target resource or is not
willing to disclose that one exists.</p>
<hr class="line" />
<h3>Apache Tomcat/9.0.26</h3>
</body>
</html>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
我的控制器类是Breweries_Controller
@RestController
@RequestMapping("/breweries")
public class Breweries_Controller {
@Autowired
Breweries_Service service;
@GetMapping(produces = MediaTypes.HAL_JSON_VALUE)
public Resources<Breweries> getAllBreweries(@RequestParam(name = "limit", required = false) Integer limit , @RequestParam(name = "offset", required = false) Integer offset) {
List<Breweries> allBreweries = service.getAllBreweries();
if(limit == null && offset == null){
limit = 20;
offset = 0;
}
List<Breweries> paginatedList = allBreweries.subList(offset, offset + limit);
for (Breweries b : allBreweries) {
int id = b.getResourceId();
Link self = linkTo(this.getClass()).slash(id).withSelfRel();
b.add(self);
linkTo(methodOn(this.getClass()).getBrewerie(id));
}
Link link = linkTo(this.getClass()).withSelfRel();
Resources<Breweries> result = new Resources<Breweries>(paginatedList, link);
return result;
}
@GetMapping(value = "/{id}", produces = MediaTypes.HAL_JSON_VALUE)
public Resource<Breweries> getBrewerie(@PathVariable("id") int id) {
Resource<Breweries> brewerie = new Resource<Breweries>(service.getBrewerieById(id));
ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).getAllBreweries(5, 50));
brewerie.add(linkTo.withRel("all-breweries"));
return brewerie;
}
@DeleteMapping(value = "/{id}")
@ResponseStatus(HttpStatus.OK)
public void delete(@PathVariable("id") int id) {
Breweries brewerie = service.getBrewerieById(id);
service.deleteBrewerie(brewerie);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody Breweries b) {
b.setResourceId(0);
b.setAddUser(0);
b.setLastMod(new Date());
service.addBrewerie(b);
}
@PutMapping(value = "/{id}")
@ResponseStatus(HttpStatus.OK)
public void update(@PathVariable("id") int id, @RequestBody Breweries b) {
b.setResourceId(id);
b.setAddUser(0);
b.setLastMod(new Date());
service.editBrewerie(b);
}
}
404
表示spring mvc未能找到适当的endpoint(控制器+方法)来运行您的请求。
@controlleradvice
只有在实际调用了该方法并且存在异常时才是相关的。但在您的情况下,流甚至没有到达控制器,这就是控制器建议不起作用的原因。
您可以通过创建实现ErrorController的控制器来自定义错误页。
我已经浏览了所有相关的帖子,但是我的@Controlller建议似乎没有处理从Controller类抛出的自定义异常。但是@Controller类中的@ExceptionHandler确实处理了异常。我不知道是什么错误。 网状物xml: dispatcher servlet。xml: @控制器建议等级: @ControllerAdvice与控制器位于同一个包中。
问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们
我对Java线程、Runnable等相当陌生。因此,我想知道为什么下面的代码没有捕获异常? 阅读有没有一种方法可以使Runnable的run()引发异常,我收集到: "...如果您的run()方法确实是Thread的目标,则抛出异常是没有意义的,因为它是不可观察的;抛出异常与不抛出异常(无)具有相同的效果。"(@erickson) 我应该检查Runnable.run()方法中的异常。 为什么会这样
为什么Java中的一些异常不被捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。 我在线程“main”java中得到了一个 但这行得通 我在java中没有发现任何方法错误。lang.NoSuchMethodError: 我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?
我的用它的作用域启动coroutine 我的只处理一些逻辑,在本例中是某种验证器 然后我的只处理网络层/本地层 以下是我得到的错误日志: 错误直接指向显式的语句。
我正在使用< code>ControllerAdvice来处理我的应用程序中的异常,它工作正常。然而,我开始使用Spring Security,通常我应该在下面的方法中捕获AuthenticationExceptions。 当我删除异常处理类时,我可以在此方法中捕获AuthenticationException。但是,当我使用异常处理机制时,它会在方法之前捕获AuthenticationExcep