首页 > 编程知识 正文

注解controller与restcontroller,controller注解原理

时间:2023-05-06 13:17:04 阅读:209143 作者:741

一、@Controller

1.作用:控制器类,处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model返回给对应的View进行展示

2.相关:需要在spring的配置中指定controller的扫描路径范围

<context:component-scan base-package="com.jaychou.*.*"/> //spring的自动扫描功能

图片中代码的意思大致是,component-scan,扫描将被自动注册为Spring beans的注释组件对应的类路径。

简单的讲,项目里xml文件使用了自动扫描配置,那么java类中如果有使用如下注解:【@Component,@Repository,@Service,@Controller,@RestController,@ControllerAdvice,@Configuration】将会被spring扫描检测到,并把这些java类注册为bean

3.使用方法:标记在类上即可,一般会和@RequestMapping组合使用,即给这个类访问加入一个根路径。

@Controller@RequestMapping(value = "/user") //根路径public class UserAction { }

 

 常用的Controller层最终返回结果:

    1.返回json数据。可以搭配@ResponseBody注解使用

    2.返回字符串路径。走视图解析器

二、@RestController 

1.作用:@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

2.相关:

springMVC中视图解析器相关配置:

<!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置视图解析器的前缀和后缀 --> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>

示例代码:【直接使用@RestController 导致返回jsp页面失败】

@RestController@RequestMapping(value = "/user")public class UserController { @RequestMapping(value = "/getUserInfo",method = RequestMethod.GET) public String getUserInfo(Map<String, Object> resultMap) { User user = new User(); user.setName("JayChou"); user.setSex(1); user.setAge(25); resultMap.put("user",user); return "userInfo"; }}

上述代码,原本是想通过视图解析器返回到“userInfo.jsp”页面。但是在Controller层使用此注解,那么配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容,即返回“userInfo”。

所以可以根据各自注解的特性,灵活搭配,满足自己的业务需求。

示例代码:【使用@Controller + @RequestMapping注解成功返回jsp页面】

@Controller@RequestMapping(value = "/user")public class UserController { @RequestMapping(value = "/getUserInfo",method = RequestMethod.GET) public String getUserInfo(Map<String, Object> resultMap) { User user = new User(); user.setName("JayChou"); user.setSex(1); user.setAge(25); resultMap.put("user",user); return "userInfo"; }}

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。