@RestController
是 Spring 框架中的一个注解,用于定义一个 RESTful 风格的控制器。它结合了 @Controller
和 @ResponseBody
的功能,使得每个方法返回的对象都会被直接写入 HTTP 响应体中,而不是渲染视图。
@RestController
可以返回多种类型的内容,包括但不限于:
ResponseEntity
)适用于构建 RESTful API,特别是在前后端分离的架构中,后端通过返回 JSON 或 XML 等格式的数据供前端使用。
原因:
解决方法:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
确保默认的内容类型设置正确。
@RestController
public class ExampleController {
@GetMapping(value = "/example", produces = MediaType.APPLICATION_JSON_VALUE)
public ExampleResponse getExample() {
return new ExampleResponse();
}
}
确保方法上使用了 produces
属性来指定返回的内容类型。
如果 Spring 无法正确序列化对象,可以自定义序列化器:
@RestController
public class ExampleController {
@Autowired
private ExampleService exampleService;
@GetMapping(value = "/example", produces = MediaType.APPLICATION_JSON_VALUE)
public ExampleResponse getExample() {
ExampleResponse response = exampleService.getExample();
return new ExampleResponseAdapter(response);
}
}
class ExampleResponseAdapter {
private ExampleResponse response;
public ExampleResponseAdapter(ExampleResponse response) {
this.response = response;
}
// 自定义 getter 和 setter 方法
}
通过以上方法,可以有效解决 @RestController
返回错误内容类型的问题。
腾讯云湖存储专题直播
北极星训练营
北极星训练营
技术创作101训练营
Techo Day
云+社区沙龙online第5期[架构演进]
云+社区技术沙龙[第28期]
腾讯云GAME-TECH游戏开发者技术沙龙
Elastic 中国开发者大会
领取专属 10元无门槛券
手把手带您无忧上云