首先我们来看下这两个注解的定义:
目录
@Controller
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.stereotype;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
@RestController
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Controller;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
分析说明
@RestController 主要是针对数据接口使用应为它标注了@Controller和@ResponseBody注解,而@Controller主要实现静态URL的映射和使用@Component实现Java类的注入。
在使用的时候一定要注意用法,请看如下示例:
package com.boonya.springboot.mybatis.sbmybatis.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
//@RestController
@Controller
@RequestMapping
public class MainController {
/*************@RestController 注解需要的写ModelAndView**********/
/* @RequestMapping("/")
public ModelAndView root(){
return new ModelAndView("/index");
}
@RequestMapping("/index")
public ModelAndView index(){
return new ModelAndView("index");
}*/
/*************@Controller 注解只需要写文件名字符串返回即可**********/
@RequestMapping("/")
public String root(){
return "redirect:/index";
}
@RequestMapping("/index")
public String index(){
return "index";
}
}