spring - Spring Boot 中用于 REST 控制器的自定义 HandlerAdapter
问题描述
在我的 Spring Boot 2 项目中,我使用自定义处理程序映射和处理程序适配器来选择适当的处理程序方法。在简单控制器的情况下它工作正常。但是,我不知道如何正确处理 REST 控制器。
我的意思是自定义处理程序适配器实现HandlerAdapter
, 有handle
一个返回类型为ModelAndView
. 但如果是RestController
我想返回一个数据对象。
正如您在下面看到的那样,我可以让它工作,但它是一个丑陋的解决方案,并且在与 Spring 一起使用时会出现问题Projection
。代码MyResponseData
中是一个简单的 DTO,我想以 json 格式返回。
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) {
response.setContentType("application/json;charset=UTF-8");
MyResponseData resp = fillResponse();
try {
Gson gson = new Gson();
String json = gson.toJson(resp);
response.getWriter().append(json);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我怎样才能简单地返回由MyResponseData
DTO 表示的数据?
解决方案
@SpringBootApplication
@RestController
public class Demo1Application {
@GetMapping
public ResponseEntity<Student> getStudent() {
Student stu = new Student();
return new ResponseEntity<>(stu, HttpStatus.OK);
}
}
@RestController 将自动使该方法返回该对象。如果在类路径中找到 jackson 库,则默认为 json
推荐阅读
- php - 为什么验证电子邮件会返回错误而注册却没有?
- php - 由于数据 json 编码,PHP Bootstrap 分页不起作用
- date - 创建计算列以将 + 工作日添加到日期
- javascript - 提交时的 Javascript 表单
- c++ - 将大数分成2个数字的简单方法?C++
- python - 无法为 matplotlib 创建 .mplstyle
- razor - 是否可以让 Razor Tag Helper 在某些服务器端条件下显示/隐藏包含在其中的内容
- r - 在 R (3.2.6) 中找不到 amsthm LaTex 包
- javascript - 为什么这不会显示值?
- python - TypeError:“NoneType”和“float”的实例之间不支持“>=”