首页 > 解决方案 > 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;
} 

我怎样才能简单地返回由MyResponseDataDTO 表示的数据?

标签: springspring-bootspring-rest

解决方案


@SpringBootApplication
@RestController
public class Demo1Application {

  @GetMapping
  public ResponseEntity<Student> getStudent() {

      Student stu = new Student();
      return new ResponseEntity<>(stu, HttpStatus.OK);
   }
}

@RestController 将自动使该方法返回该对象。如果在类路径中找到 jackson 库,则默认为 json


推荐阅读