Spring MVC的一些关于请求的注解用法详解

    这段时间一直在着手于RESTful风格的接口设计。springmvc的RESTful风格的url是通过@RequestMapping 及@PathVariable annotation提供的。为此我好好研究了一下关于Springmvc请求这方面的内容,也借鉴了前人的经验写下这篇博客,记录下我的学习心得。

一、@RequestMapping简介

@RequestMapping是用来映射URL,它可用在类定义处和方法定义处。我们映射的url是相对于根目录而言的,如代码所示:

package com.gray.user.controller;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.ui.Model;  
import org.springframework.web.bind.annotation.RequestMapping;  
  
import com.gray.user.entity.User;  
import com.gray.user.service.impl.UserServiceImpl;  
  
@Controller  
@RequestMapping("/test")   
public class LoginController {  
    @Autowired  
    private UserServiceImpl userService;  
  
@RequestMapping("/dologin.do") //url  
public String dologin(User user, Model model){  
    if(userService.doUserLogin(user)){  
        model.addAttribute("successMsg", "登陆成功!");//返回到页面所夹带的参数  
        model.addAttribute("name", user.getUsername());  
        return "/success";//返回的页面  
    }else{  
        model.addAttribute("failMsg", "用户不存在或密码错误!");  
        return "/fail";  
    }     
}  
} 
dologin方法所映射的url地址我们写成 http://localhost:9090/test/dologin.do

关于RequestMapping这个注解,里面一共有6个属性

1.value

指定请求的实际地址;

2.method

指定请求的method类型, GET、POST、PUT、DELETE等;

3.consumes

指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

4.produces

指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

5.params

指定request中必须包含某些参数值;

6.headers

指定request中必须包含某些指定的header值;

二、@PathVariable简介

当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

三、@RequestBody简介

             该注解用于读取Request请求的body部分数据,这主要是通过spring的消息转换器messageConverter实现的,首先我们需要在配置文件里面配上这个bean,通过已经配置的消息转换器把相应的数据转换成要传入的对象进而绑定到方法的参数中。

四、@RequestParam简介

             在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法,我们可以对传入参数指定参数名,前端传进来的参数名要和这个value值一致我们也可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传。

五、@ResponseBody简介

和@RequestBody相似的用法,根据配置的消息转换器将对象转换为指定格式后,写入到Response对象的body数据区。

六、@CookieValue简介

从Http请求头中的Cookie提取指定的某个Cookie。

七、常见注解用法实例

  1. 关于@RequestMapping
  • value

value是默认属性,即@RequestMapping("/dologin.do")和@RequestMapping(value="/dologin.do")是等价的。

  • method

@RequestMapping(value = {"/ws/createEmployeeBasic","/ws/updateEmployeeBasic"}, method = RequestMethod.POST)

注:mapping的value是可以写多个的。

  • consumes

consumes="application/json",就是需要参数以json格式传进来我才能接收。如1的代码所示,随后我们把传进来的数据通过@RequestBody转换成我要的对象。

  • produces

@RequestMapping(value="/test.do",produces="application/json;charset=UTF-8"),和上面那个用法差不多。两者区别就是前者只管请求,后者两个都管。

  • params

@RequestMapping(value="/dologin.do",params={"user=gray","pwd=111111"})

这种写法就限制了只有当传进来的参数user=gray并且pwd=111111时才能映射到下面的方法,否则报404。

  • headers

老实说这个用法我几乎没用过。它用于指定请求头里面的参数,限客户端的请求。如:

@RequestMapping(value="/dologin.do", headers="Host=localhost:9090")

这种写法就是限制了只有本机发来的请求才接收。

        2.关于@RequestBody和@PathVariable

在这里我要说一下,带占位符的url,是Spring 3.0的新功能,我在项目中实现restful风格的url就是根据这个来实现的。

例如:

	@RequestMapping(value = "/ws/OEmployeeBasic/{token}/{timestamp}", method = RequestMethod.POST, consumes="application/json")
	@ResponseBody
	public void pageList(
			@RequestBody Employee emp,
			@PathVariable String token, @PathVariable String timestamp, 
			HttpServletRequest request, HttpServletResponse response){
		......
	}
{token}等需要通过@PathVariable注解将占位符中的参数绑定到方法的参数中。

       3.关于@ResponseBody

在springmvc的开发中,所有返回数据的请求都需要加上这个注解。如:

	@RequestMapping("/myEspPageList.do")
	@ResponseBody
	public Object myPageList(Employee emp, HttpServletRequest request, HttpServletResponse response){
		Object obj = super.pageList(emp, request, response);
		return obj;
	}

        4.关于@RequestParam

        @RequestMapping("/empTableList.do")
	public String list(Model model,@RequestParam(value="tabs",required=false)Integer tabs){
		if (tabs == null || tabs > 3 || tabs < 0) tabs = 0; // tabs只允许0/1/2/3,默认为0
		model.addAttribute("tabs",tabs);
		return "/configuration/basetable_list";
	}
正如上面所说的,返回页面是不需要加 @ResponseBody
差不多常用的和我项目中用过都一一列举出来的。方便大家学习。





  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring MVC 是一种基于 Java 的开发框架,用于构建 Web 应用程序。它是 Spring 框架的一部分,提供了一种模型-视图-控制器(MVC)的架构模式,帮助开发人员将应用程序的不同方面进行解耦。 在 Spring MVC 中,应用程序的请求由 DispatcherServlet 接收并将其路由到适当的处理程序(也称为控制器)。控制器处理请求并生成模型数据,然后选择适当的视图来呈现这些模型数据给用户。 以下是 Spring MVC 的一些重要组件和概念: 1. DispatcherServlet:是整个 Spring MVC 的中央调度器,负责接收请求并将其分派给相应的处理程序。 2. 控制器(Controller):处理请求的组件,根据请求的类型和内容执行逻辑处理,并生成模型数据。 3. 模型(Model):表示应用程序的数据和状态。控制器可以通过模型对象来设置和获取数据,并将其传递给视图进行呈现。 4. 视图(View):负责将模型数据呈现给用户。可以是 JSP、Thymeleaf 或其他模板引擎。 5. 处理器映射器(Handler Mapping):将请求映射到相应的处理程序(控制器)。它根据配置文件或注解来确定请求与处理程序之间的映射关系。 6. 视图解析器(View Resolver):根据视图名称解析出实际的视图对象,它将逻辑视图名转换为物理视图。 7. 拦截器(Interceptor):在请求处理的过程中,可以对请求进行预处理和后处理。可以用于身份验证、日志记录等功能。 8. 数据绑定(Data Binding):自动将请求参数绑定到控制器方法的参数或模型对象的属性上。 9. 校验器(Validator):用于验证模型对象的数据的有效性。 Spring MVC 提供了灵活且强大的功能,使开发人员能够轻松构建可扩展和可维护的 Web 应用程序。它还支持 RESTful Web 服务和国际化等功能。通过良好的设计和组织,Spring MVC 可以实现松耦合、可测试和可扩展的应用程序架构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值