Spring Boot中用于REST控制器的自定义HandlerAdapter

时间:2018-12-01 13:33:58

标签: spring spring-boot spring-rest

在Spring Boot 2项目中,我使用自定义处理程序映射和处理程序适配器来选择适当的处理程序方法。在使用简单控制器的情况下,它可以正常工作。但是,我不知道如何正确处理REST控制器。

我的意思是定制处理程序适配器实现HandlerAdapter,它具有一个handle方法,返回类型为ModelAndView。但是如果是RestController,我想返回一个数据对象。

我可以使它正常工作,如下所示,但这是一个丑陋的解决方案,在与Spring Projection一起使用时存在问题。在代码MyResponseData中,我想以json格式返回一个简单的DTO。

@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表示的数据?

1 个答案:

答案 0 :(得分:0)

@SpringBootApplication
@RestController
public class Demo1Application {

  @GetMapping
  public ResponseEntity<Student> getStudent() {

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

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