RESTful @Controller和@RestController使用

@RestController和@Controller的区别 而@Controller适用于构建传统的Web应用,返回HTML页面。返回类型: @RestController注解的类返回的是数据,一般用于构建RESTful风格的API接口,返回的数据通常是JSON格式;而@Controller注解的类返回的是视图,一般用于构建传统的Web应用,返回的是HTML页面。注解组合: @RestController注解相当于@Controller和@ResponseBody的结合体,省去了在@Controller中使用@ResponseBody的步骤,使代码更为简洁。 阅读详情

简单的理解,restful是一种url风格,或者说是规范,在以前的网址中,假定一个业务,取得数据网址为http://test/get,添加信息的网址为http://test/post,类似这样。
但是在restful风格中,取得数据和添加数据的网址均应为http://test,方法为get或者post;
所以,在restful风格中,一个网址就是一个资源,其形式类似于http://xxx.com/xx/{id}/{id} ,

例如某购物网站,产品有很多种类,每种产品下有很多子类型,那么http://shop.com/laptop/lenovo/1103
代表了联想1103型号电脑,而http://shop.com/laptop/hp/1024 代表了2014型号电脑。

最近,我正在使用RESTfull的方式构建一个web服务。尽管现在有很多的一般的指导和提示告诉你如何定义restful接口,但是却没有一个明确的标准或大家都接受的schema定义去遵循。


高级别的模式是:

http(s)://server.com/app-name/{version}/{domain}/{rest-convention}
  • {version}代表api的版本信息。
  • {domain}是一个你可以用来定义任何技术的区域(例如:安全-允许指定的用户可以访问这个区域。)或者业务上的原因。(例如:同样的功能在同一个前缀之下。)
  • {rest-convention} 代表这个域(domain)下,约定的rest接口集合。

单资源( singular-resourceX )

  • url样例:order/ (order即指那个单独的资源X)
  • GET – 返回一个新的order
  • POST- 创建一个新的order,从post请求携带的内容获取值。

单资源带id(singular-resourceX/{id} )

  • URL样例:order/1 ( order即指那个单独的资源X )
  • GET – 返回id是1的order
  • DELETE – 删除id是1的order
  • PUT – 更新id是1的order,order的值从请求的内容体中获取。

复数资源(plural-resourceX/)

  • URL样例:orders/
  • GET – 返回所有orders

复数资源查找(plural-resourceX/search)

  • URL样例:orders/search?name=123
  • GET – 返回所有满足查询条件的order资源。(实例查询,无关联) – order名字等于123的。

复数资源查找(plural-resourceX/searchByXXX)

  • URL样例:orders/searchByItems?name=ipad
  • GET – 将返回所有满足自定义查询的orders – 获取所有与items名字是ipad相关联的orders。

单数资源(singular-resourceX/{id}/pluralY)

  • URL样例:order/1/items/ (这里order即为资源X,items是复数资源Y)
  • GET – 将返回所有与order id 是1关联的items。

singular-resourceX/{id}/singular-resourceY/

  • URL样例:order/1/item/
  • GET – 返回一个瞬时的新的与order id是1关联的item实例。
  • POST – 创建一个与order id 是1关联的item实例。Item的值从post请求体中获取。

singular-resourceX/{id}/singular-resourceY/{id}/singular-resourceZ/

  • URL样例:order/1/item/2/package/
  • GET – 返回一个瞬时的新的与item2和order1关联的package实例。
  • POST – 创建一个新的与item 2和order1关联的package实例,package的值从post请求体中获得。

上面的规则可以在继续递归下去,并且复数资源后面永远不会再跟随负数资源。

总结几个关键点,来更清晰的表述规则。
在使用复数资源的时候,返回的是最后一个复数资源使用的实例。
在使用单个资源的时候,返回的是最后一个但是资源使用的实例。
查询的时候,返回的是最后一个复数实体使用的实例(们)。


最后推荐一个RESTful 非常好的文章:http://blog.jobbole.com/41233/

在spring mvc中,有@requestparm, @requestbody和@pathvariable 三种注解来获得浏览器端的参数,其中前两者都是由浏览器post提交的参数,而@pathvariable 则是从网址中取得参数


@Controller和@RestController的区别?

官方文档: @RestController is a stereotype annotation that combines
@ResponseBody and @Controller.

意思是:
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。


  • 在@controller注解中,返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,与html页面配合使用的,
    在这种情况下,前后端的配合要求比较高,java后端的代码要结合html的情况进行渲染,使用model对象(或者modelandview)的数据将填充user视图中的相关属性,然后展示到浏览器,这个过程也可以称为渲染

  • 而在@restcontroller中,返回的应该是一个对象,即return一个user对象,这时,在没有页面的情况下,也能看到返回的是一个user对象对应的json字符串,而前端的作用是利用返回的json进行解析渲染页面,java后端的代码比较自由。


1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
例如:本来应该到success.jsp页面的,则其显示success.

2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

java注解:@Controller 与 @RestController 本文深入解析Spring框架中的@Controller和@RestController注解。@Controller主要用于传统Web开发,处理请求后返回视图(如HTML页面),需配合@ResponseBody才能返回数据;而@RestController是@Controller和@ResponseBody的组合,专为RESTful API设计,自动将返回值转换为JSON/XML等格式。文章通过代码示例对比两者的使用差异,并指出适用场景:@Controller适合页面渲染和混合应用 阅读详情

相关推荐

@RestController与@controller区别及@responsebody与@requestbody区别

@RestController与@controller区别及@responsebody与@requestbody区别

qq_53612179的博客 872

Restful &controller层的简化

REST还有一个问题就是如访问地址http//localhost/user既可以表示为保存用户的路径,又可以表示添加用户信息的路径,也就是说一个REST风格描述的资源访问路径可以代表几个不同的访问数据库资源信息的路径因此、我们应该怎么精确的区分到底访问的是哪个路径下的资源呢使用行为动作(请求方式)区分。......

lwj_07的博客 563

别再被坑了!手把手教你从官网下载免费正版Notepad++(附最新网盘链接)

本文详细指导如何从Notepad++官网安全下载正版软件,避免山寨版本带来的安全风险。通过识别官网特征、推荐官方下载渠道、揭露山寨网站骗局及验证正版功能,帮助用户高效获取纯净的Notepad++代码编辑器,并分享实用插件和配置优化技巧。

weixin_42527654的博客 562

springboot-实现RESTFull设计风格

概念 RestFull是一种互联网软件架构设计风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构概念和设计原则,基于这种理念和原则设计可以更简洁和更有层次感 RestFull风格 URL上的变化:http://www.xx.com/path/123/123,传统的写法http://www.xx.com/path?name=123&id=123 Controller类上的变化:@RestFullController,是@Controller和@RsponseBody组成

帅哥趣谈 373

【DAY11】超参数调整专题1

核心优势: 它不是随机选择下一个点,而是根据先前评估的结果建立一个概率模型(通常是高斯过程),预测哪些参数组合可能产生更好的结果,并据此选择下一个评估点。这使得它在寻找最优解方面通常比随机搜索更高效(用更少的迭代次数达到相似或更好的性能),特别是当模型训练(单次评估)非常耗时的时候。实际上,有着非常多的方式可以实现贝叶斯优化,上面的代码比较简洁美观,贝叶斯优化和网格搜索的代码书写风格高度一致。- 需要定义参数的搜索空间,与随机搜索类似,当搜索空间非常大时,它通常比网格搜索和随机搜索更有效。

daomingwu1的博客 747

三相逆变器拓扑结构的分析及应用场景

三相逆变器是电力电子领域中广泛应用的一种设备,用于将直流电转换为交流电。不同的拓扑结构在性能、成本、复杂度和应用领域上存在差异。小编将在本文中将进一步拓展对三相逆变器拓扑结构的分析,并探讨其适用的应用场景。

道合顺的博客 2235

SpringMVC的Restfull风格接口开发

版权声明:本文为博主原创文章,未经博主允许不得转载 什么是Restfull风格? 简单点说就是访问后台时的请求路径与请求的方式有所不同. 传统的请求路径如:http://127.0.0.1:8080/user/getUser.do?id=1 Restfull风格的请求路径为:http://127.0.0.1:8080/user/1 操作步骤 将web.xml中 Controller中的写法 //...

weixin_44914784的博客 1023

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5338

SpringBoot @Controller,@RestController,@SpringBootApplication一点理解

SpringBoot @Controller和@RestController注解的区别 @RestController注解相当于@ResponseBody + @Controller合在一起 @ResponseBody相当于自动帮我们把返回序列化,如果在controller上用@RestController,那么这个controller里的方法都不能返回视图页面,如jsp等;如果controlle...

weixin_40208575的博客 751

【目标检测-YOLO】YOLOv5-v5.0-yolov5s网络架构详解(第一篇)

源码:GitHub - ultralytics/yolov5 at v5.0 由于YOLO v5 代码库在持续更新,如上图,有多个版本,每个版本的网络结构不尽相同。以下内容以 v5.0 为准,网络结构选用 yolov5s。 为了方便画图和理解网络结构,选用可视化工具:Netron 网页版进行可视化, 然后使用PPT作图。 在Releases · ultralytics/yolov5 · GitHub找到 v5.0中的Assets 中的yolov5s.pt并下载该权重。 下图为直接......

博观约取,厚积薄发 2万+

ISP算法:宽动态HDR

动态范围(Dynamic Range):在很多领域来表示某个变量的最大值和最小值的比值。在数字图像处理领域里,动态范围也被称为图像对比度,表示图像可以显示范围内,像素最大亮度值和最小亮度值的比值。 高动态范围图像(High Dynamic Range Image): 可以反映真实场景中高动态范围亮度信息图像。 高动态技术:能自动调整图像动态范围的一种技术。该技术是一种利用计算机高速运算产生高

a200800170331的专栏 1万+

乐优商城学习笔记十四-搜索微服务(二)

2.实现基本搜索 2.1.页面分析 2.1.1.页面跳转 在首页的顶部,有一个输入框: 当我们输入任何文本,点击搜索,就会跳转到搜索页search.html了: 并且将搜索关键字以请求参数携带过来: 我们打开search.html,在最下面会有提前定义好的Vue实例: 我们打开search.html,在最下面会有提前定义好的Vue实例: <script type="text/javasc...

小武的Blog 515

AndroidKiller之APK 编译失败,无法继续下一步签名【BUG解决】【App反向解析】

文章目录项目场景:问题描述原因分析:解决方案:BUG解决 项目场景: AndroidKiller: 在反向解析APP包时报错:APK 编译失败,无法继续下一步签名。 网上很多方法都是无效的哈,我追究原因发现,这个bug的出现大部分情况都是因为Apktool的问题。 此方法:百分之百解决此bug! 错误如下: 问题描述 APK 编译失败,无法继续下一步签名! 原因分析: Apktool版本不适配的问题,现在的技术更新换代太快,我们安装AndroidKiller的时候,有时候不是官方渠道的话,他的版本是非常

一键难忘的博客 2万+

@Controller和@RestController的区别(Restful风格)

Controller和RestController的联系与区别 一般使用注解开发的情况下,我们都会在Controller层使用Controller相关的注解,目的是标记这是一个控制类,同时讲它注入到spring容器中,此时需要在spring容器中开启扫描包的功能。那么@Controller与@RestController的区别如下: ①在每个映射方法之后都会有一个返回值,@Controller是跳转到返回值对应的页面,而@RestController则是向请求页面返回数据。举个例子来说: 首先写一个hell

lijiehua 1060

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

XiaoqiangClub的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Restful风格、@RestController和@Controller

一、RestFul风格 简单的理解,restful是一种url风格,或者说是规范,在以前的网址中,假定一个业务,取得数据网址为http://test/get,添加信息的网址为http://test/post。 但是在restful风格中,取得数据和添加数据的网址均应为http://test,方法为get或者post。所以,在restful风格中,一个网址就是一个资源,其形式类似于http://x...

Calvin的博客 679

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Restful风格,@RestController注解 与 @Controller

宁静的风格 简单的理解,restful是一种url 风格,或者说是规范,在以前的网址中,假定一个业务,取得数据网址为http:// test / get,添加信息的网址为http:// test / post,类似这样。 但是在宁静风格中,取得数据和添加数据的网址均应为http:// test,方法为get或者post;所以,在restful风格中,一个网址就是一个资源,其形式类似于http:...

A_JavaEE的博客 4798

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

构建强大的RESTful API:@RestController与@Controller的对比与应用

构建强大的RESTful API:@RestController与@Controller的对比与应用

todoitbo的博客 1万+

@Controller和@RestController的区别

详解@Controller和@RestController的区别

weixin_60090880的博客 383

Spring学习之@Controller和@RestController的区别

@Controller和@RestController的区别@Controller和@RestController的区别拓展 @Controller和@RestController的区别 首先这两个都是Spring里面的注解,标记当前类是一个Controller类,加上该注解会将当前类自动注入到spring容器中。同时也表示该类可以接收Http请求。 @Controller:标识一个Spring类是Spring MVC controller处理器;可以直接返回到前端界面 @RestController:是@

ccccls的博客 1325

3.2.7.3.@Controller 和 @RestController

作用:Spring MVC 中的控制器注解,用于标注控制器类,处理 HTTP 请求。区别:返回JSON或XML数据,而通常返回视图名称。

浩瀚银河 935

Springboot注解@Controller和@RestController的区别

1. 注解@Controller和@RestController的相同和不同点 相同点 不同点 Controller @Controller和@RestController都用来表示当前类是一个控制器servlet,都是用来表示Spring某个类的是否可以接收HTTP请求 标识一个Spring类是SpringMVCcontroller处理器。 @Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@Re

qq_42321195的博客 418

在Spring框架里@RestController和@Controller的不同

功能定位:RESTful 风格的控制器,专门用于返回数据(如 JSON 等),无需视图解析器。响应处理:所有方法默认返回数据,自动通过消息转换器序列化为 JSON/XML 等格式。响应处理:方法默认返回视图名称(如 JSP、Thymeleaf 模板等),需要配合。功能定位:是传统的MVC控制器,主要处理 Web 页面请求。注解才能直接返回数据(如 JSON、字符串等)。

weixin_52854996的博客 117

Spring (13)@Controller和@RestController的区别

使用时,方法默认不会将返回值作为响应正文,除非方法上加了注解。使用时,类中所有方法默认都会将返回值作为响应正文。选择使用或取决于你是否想为整个控制器类的方法自动应用效果,即是否打算编写主要返回JSON或XML的REST。

qq_43012298的博客 709

使用@Controller注解和@RestController注解的区别

总之,@Controller 注解用于创建传统的 MVC 控制器,而 @RestController 注解用于创建 RESTful 服务,直接返回数据而不是视图页面。@Controller 和 @RestController 注解是 Spring 框架中用于标识控制器类的注解,它们的主要区别在于对返回结果的处理方式。

weixin_46300114的博客 349
上一篇: 手机验证码接收注册新账户
下一篇: Springboot项目云部署 ---- 基于Docker的部署
leoe_
博客等级 码龄11年 160粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值