spring - Spring Boot Rest api不产生json错误
问题描述
我正在尝试在我的 Rest API 中实现错误处理并使用邮递员进行测试,当我给出不正确的路径邮递员返回 404 但它是 404 HTML 时。
有人告诉我,默认情况下 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>
我正在使用的 spring boot 依赖项是
<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);
}
}
解决方案
请检查您的控制器类是否在源包中(包含@SpringBootApplication
存在的类中的包)。如果没有,请添加@ComponentScan
注释@SpringBootApplication
以确保正在扫描您的控制器类以查找端点。这对我来说经常是一个问题!
推荐阅读
- json - 通过删除 Python 修改 JSON 字典
- c# - 如何在 ASP.NET Core 中使用 mysql 进行单元测试和操作结果
- flutter - Flutter 创建带有图像和图标的 youtube 播放器预览模板
- oop - 如何使深度嵌套的函数调用多态?
- python - 如何在海龟模块中使运动更顺畅?
- python - KeyError:“['China'] 不在索引中”
- android - 将现有的 Java/Kotlin android 应用程序迁移到 React 本机应用程序。但是如何处理现有的共享首选项
- html - 如何制作`` 时不展开 `` 悬停
- python - 如何将 DataFrame 添加到另一个 DataFrame 的某些列
- r - 如何使用 Mapdeck 和 Shiny 创建图层分组