方式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 {@Overridepublic 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 {@Overridepublic 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也有类似的方式* */@Beanpublic RouterFunction routerFunction(){return RouterFunctions.route().GET("/routerFunction",request-> ServerResponse.ok().contentType(MediaType.TEXT_HTML).body("Controller using RouterFunction")).build();}
知道这些方式有啥用呢?有些时候,我们需要在starter中内置一些controller,但是又不想被其他的组件扫描到(比如swagger),这个时候用处就来了。