SpringBoot学习过程:使用@Controller和@RestController出现的问题

使用场景

今天在学习SpringBoot集成jsp时,发现一个问题就是使用@RestController注解,jsp页面是直接返回return的值,且无视配置的视图解析器前缀和后缀。

package com.example.springbootjsp.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//@RestController
@Controller
public class IndexController {

    @RequestMapping(value = "/index")
    public String Index(Model model){
        model.addAttribute("data","springboot集成jsp页面!!");
        return "index";
    }
}

@RestController源码:

package org.springframework.web.bind.annotation;
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Controller
@org.springframework.web.bind.annotation.ResponseBody
public @interface RestController {
    @org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Controller.class)
    java.lang.String value() default "";
}

@Controller源码:

package org.springframework.stereotype;
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Component
public @interface Controller {
    @org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Component.class)
    java.lang.String value() default "";
}

分析

由此可以看出:
RestController注解比Controller多出一个注解@ResponseBody。
通过查询@ResponseBody注解是将java对象转换成json格式的数据。而在controller类中使用其注解后,是不走视图解析器,而是直接返回return中的值到前端。

结论

  1. 使用RestController注解,Controller类中的方法无法返回jsp页面或者HTML,而且配置视图解析器也不生效,在前端直接返回其return中的值。
  2. 使用Controller注解,想返回jsp页面则需要配置其视图解析器,如需要返回其json格式数据,需方法上加@ResponseBody即可。

本文章参考以下文章

1. @ResponseBody详解

2.RestController和Controller区别

3.RestController和Controller区别详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值