前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Controller和RestController注解区别

Controller和RestController注解区别

作者头像
oktokeep
发布2025-03-25 13:36:47
发布2025-03-25 13:36:47
5000
代码可运行
举报
文章被收录于专栏:第三方工具第三方工具
运行总次数:0
代码可运行

Controller和RestController注解区别

Controller和RestController注解在Spring框架中主要用于处理HTTP请求,但它们在返回类型和使用场景上有显著区别。‌

基本定义和使用场景

‌@Controller‌:这是一个通用的控制器注解,主要用于MVC(Model-View-Controller)架构中的控制器层。它标识一个类是Spring MVC的控制器处理器,负责处理HTTP请求并将处理结果返回给客户端。控制器类中的方法通常通过@RequestMapping等注解来映射特定的URL请求路径和HTTP方法。返回的结果可以是一个视图名称,框架会根据视图解析器将其解析为具体的视图页面。‌

‌@RestController‌:这是@Controller和@ResponseBody的组合注解,专门用于构建RESTful Web服务。它表示该类是一个Spring MVC控制器,且所有方法的返回值会直接作为HTTP响应体返回给客户端,而不是解析为视图名称。使用@RestController注解的类中的每个方法都默认返回JSON、XML或其他数据类型,而不是视图。‌

返回类型

‌@Controller‌:处理方法的返回值可以是String(视图名称)、ModelAndView对象或者其他适合渲染视图的数据类型。返回的视图名称由视图解析器解析为具体的视图页面。‌

‌@RestController‌:处理方法的返回值通常是一个具体的Java对象,该对象会被自动序列化为JSON或XML格式并返回给客户端。例如,返回一个Greeting对象会自动转换为JSON格式。

使用场景

‌@Controller‌:适用于传统的Web应用开发,需要渲染视图并与用户进行交互的场景。例如企业内部管理系统、电子商务网站的前端页面等。‌

‌@RestController‌:适用于构建RESTful Web服务,提供数据接口供其他系统或客户端调用的场景。例如移动应用的后端服务、微服务架构中的服务组件等。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
@RestController
@Scope("prototype")
@RequestMapping("/pay/")
public class PayController { 
    @RequestMapping(value = "localNotifyRcv",method= RequestMethod.POST)
    public ReturnResult localNotifyRcv(@RequestParam Map<String, String> getParam, HttpServletRequest request, HttpServletResponse response) {

    return new ReturnResult(0, "调用成功", new HashMap<>());
    }
}

public class ReturnResult {
    private Integer sub_code;
    private String sub_message;
    private Map sub_result;
    // set get方法 ..    
}

调用方式:

代码语言:javascript
代码运行次数:0
运行
复制
Map<String,String> notifyMap = new HashMap<>();
notifyMap.put(”orderId”, “tt12556688”);
notifyMap.put(”status", ”1”);
//前提是:‌@RestController而不是‌@Controller 来注解接口
String url = "http://localhost:8081/pay/localNotifyRcv";
//使用字符串接收
String json = restTemplate.postForObject(url, notifyMap, String.class);
logger.info(">>>>>>构造异步通知返回结果:json=[{}],params=[{}]",json,GsonUtils.toJson(notifyMap));
                                
//仅仅测试,测试通过。使用对象接收也可以
ReturnResult json2 = restTemplate.postForObject(url, notifyMap, ReturnResult.class);
logger.info(">>>>>>构造异步通知返回结果22:json=[{}],params=[{}]",GsonUtils.toJson(json2),GsonUtils.toJson(notifyMap));
    

 link:异步回调方法 调用返回Cannot render error page for request xxxxx as the response has already been commited. As a result, 解决方案

https://cloud.tencent.com/developer/article/2507773

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档