茴香豆的茴的写法-SpringBoot处理客户端请求的几种方式
方式1:@Controller或者@RestController
/**
* 方式1:@Controller
* */
@RestController
public class AtController {
@GetMapping("/at")
public String at() {
return "@Controller";
}
}
方式2:@Component + Controller接口
/**
* 方式2:@Component + Controller接口
* */
@Component("/interface")
public class InterfaceController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=utf-8");
response.getOutputStream().write("Controller implements interface".getBytes(StandardCharsets.UTF_8));
return null;
}
}
方式3:@Component + HttpRequestHandler
/**
* 方式3:@Component + HttpRequestHandler
* */
@Component("/httpRequestHandler")
public class HttpRequestHandlerController implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getOutputStream().write("Controller implements HttpRequestHandler".getBytes(StandardCharsets.UTF_8));
}
}
方式4:@Bean + RouterFunction
/**
* 方式4:RouterFunction,WebFlux也有类似的方式
* */
@Bean
public RouterFunction routerFunction(){
return RouterFunctions.route().GET("/routerFunction",
request-> ServerResponse.ok().contentType(MediaType.TEXT_HTML).body("Controller using RouterFunction")
).build();
}
知道这些方式有啥用呢?有些时候,我们需要在starter中内置一些controller,但是又不想被其他的组件扫描到(比如swagger),这个时候用处就来了。