Spring MVC 注解

本文详细解析了Spring MVC框架中的关键注解,包括@Controller、@RestController、@RequestMapping、@Service、@Repository等,阐述了它们的作用及应用场景,帮助开发者更好地理解和运用Spring MVC。

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

1.@Controller @RestController
作用在类上,应用于控制层,也就是我们的action层,负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。和@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。单独只定义@controller只是说明该类是一个控制器类,加上@requestMapping才是处理器类。单独定义注解还不能被spring识别,因此还需要进行spring配置才能识别,以下两种方式

(1)显示bean定义:<bean class="com.host.app.web.controller.MyController"/>
(2)使用包路径扫描<context:component-scan base-package = "com.test" />//路径写到controller的上一层路径

@RestController =@ Controller + @ResponseBody。
@RestController,返回的内容是你return中的内容,如果是return “Hello World”,页面显示的就是Hello World。如果是@Controller,返回的是return中对应的页面,比如return “hello”,页面的名称是hello,如hello.jsp。

解决问题:使用@RestController不渲染页面,只返回模板字符串名称。
在浏览器用链接http://localhost:8080/city/page/list 访问时页面上只出现了cityList字样,预期是返回cityList.html

2.@RequestMapping
作用在类、方法上,定义请求的映射路径,类路径+方法路径就是请求真正的映射路径。value:路径 method:请求的方法如GET POST, produces:数据格式

 @RequestMapping(value = "/application_page", method = RequestMethod.POST, produces = "application/json")
 @ResponseBody
 public Object page(HttpServletRequest request) {
           ............
 }
 
@RequestMapping(value={“/hello”,”/hi”}) 支持多路径映射至一个方法

3.@Produces
应用于类、方法,定义响应的数据格式。

@Produces(value = "application/json;charset=utf-8")

4.@Service
应用于业务层处理类,说明该类进行业务处理。

@Service(value="cpcMemberInfoService")
public class MemberInfoServiceImpl  implements MemberInfoService {
}

5.@Repository
应用于持久层类,也就是我们说的DAO层
6.@Component
组件,当不确定是哪一层时,可以使用该注解。
注:1.4.5.6其实在效果上spring都会当做bean加载到上下文中,但是建议按照功能使用在项目中,这对于分层的web架构很有好处。
7.参数:
@RequestParam(value=“name”,required=true,defaultValue=“Tom”)
value:参数的名称,required:是否必传,true是 false 否,defaultVaule:当请求未传参数时的默认值
@RequestBody
请求方法为POST时,使用@RequestBody定义参数,参数使用JSON格式传到请求controller中
@PathVariable
参数作为路径上的一部分

@ResponseBody
@RequestMapping(value = "/list/{year}", method = RequestMethod.GET)
public List<SitePortraitMid> getList(@PathVariable String year) throws Exception {
        return sitePortraitMidService.selectByYear(year + "%");
 }

8.响应:@ResponseBody
后台以JSON格式进行返回。

@RequestMapping(value = "/saveDetail", method = RequestMethod.POST)
@ResponseBody
public void saveDetail(@RequestBody String json ){
	        ........
}

9.@Vaule
应用于类的属性,可以将配置文件中定义的属性注入

@Value("${jss.bucket}")
 private String bucketName;

10.@Autowired @Qualifier
常应用于属性或者setter方法,自动查询符合条件的bean并注入。,默认是按照byType进行注入,如果想使用byName,则可以联合使用@Qualifier进行设置。

 @Autowired @Qualifier("upload2Jss")
  private Upload2JssService upload2JssService;

11.@Resource
应用于类、参数、setter方法。
默认是按照byName进行注入。作用类似于Autowired,只不过默认策略是不同的。
@Resource装配顺序
(1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
(2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
(3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
(4. 如果既没有指定name,又没有指定type,则自动按照属性名(字段名),byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

@Resource(name="baseDao")     
private BaseDao baseDao; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值