@Controller及@RestController注解简单分析及应用场景

一、@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";
    }

}

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值