SpringBoot中@Controller和@RestController的作用和区别

本文详细解析了SpringBoot框架中@Controller与@RestController注解的功能差异。@Controller用于处理请求并返回视图,配合@GetMapping/@PostMapping/@RequestMapping实现页面跳转;而@RestController则等效于@Controller+@ResponseBody,专门用于返回JSON数据,不支持视图解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot中@Controller和@RestController的作用和区别

在springboot开发中控制层使用注解@Controller时,加有@GetMapping(@PostMapping或@RequestMapping)注解的方法返回值对应的是一个视图,而使用@RestController返回值对应的是json数据,而@Controller+@ResponseBody的作用相当于@RestController。

常用的Controller层作用和最终返回的结果

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

返回结果:

1.返回json数据,可以跟@ResponseBody注解使用

2.返回字符串路径,作为视图跳转解析器

@Controller的实际应用

在src/main/resources/config/application.properties配置文件中配置

然后在src/mian/java/包名/controller控制层下创建DemoController类,代码为:

/**
 * SpringBoot整合thymeleaf
 * @author JackLin
 *
 */
@Controller
public class DemoController {
	
	@RequestMapping("/show")
	public String showInfo(Model model) {
		model.addAttribute("msg", "Thymeleaf第一个案例!!");
		model.addAttribute("key", new java.util.Date());
		return "index";
	}

	@RequestMapping("/show2")
	public String showInfo2(Model model) {
		model.addAttribute("sex", "男");
		model.addAttribute("id", "2");
		return "index2";
	}
	@RequestMapping("/show3")
	public String showInfo3(Model model) {
		List<Users> list = new ArrayList<>();
		list.add(new Users(1,"张山",20));
		list.add(new Users(2,"李四",21));
		list.add(new Users(3,"JackLin",22));
		model.addAttribute("list", list);
		return "index3";	
		}
	@RequestMapping("/show4")
	public String showInfo4(Model model) {
		Map<String, Users> map = new HashMap<>();
		map.put("i1", new Users(1,"张山",20));
		map.put("i2", new Users(2,"李四",22));
		map.put("i3", new Users(3,"龙武",23));
		
		model.addAttribute("map", map);
		return "index4";
	}
	@RequestMapping("/show5")
	public String showInfo(HttpServletRequest request,Model model) {
		
		request.setAttribute("req", "HttpServletRequest");
		request.getSession().setAttribute("sess", "HttpSession");
		request.getSession().getServletContext().setAttribute("app", "Application");
		return "index5";
	}

}

启动程序后在浏览器输入localhost:8080/show访问页面即为templates文件夹下的各个html文件

这里的访问效果就不一一显示了,直接开浏览器输入localhost:8080/show可以返回你想要的页面(show可以是你自己设置的页面),返回哪个页面名字就需要在templates下创建相应的HTML文件。

@RestController在实际中的应用

@RestCobtroller=@Controller+@ResponseBody合在一起使用,.@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

实例代码:【使用@RestCobtroller导致返回jsp页面失败】


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值