SpringMVC之常用注解及 restFull常用注解

一、SpringMVC之常用注解

一.注解
1.@RequestParam :

用于方法形参与前台传递参数不一致时的转换, 当配置类该注解时,传递参数必须和该注解中的value一致

2.@CookieValue

从Cookie中获取指定的属性值 ,配置到方法参数上

3.@RequestHeader

配置到方法参数上 从请求中获取指定的头信息

4.@PathVariable 😗

从占位符中获取数据的 value : 占位符中的属性名

5.@ModelAttribute

在前置方法中获取请求参数,绑定到request作用域,供控制器方法使用

6.@SessionAttributes

需要配合Mode对象一起使用 ,将model对象中的数据存入到session域中 names:

7.@RequestParam

配置在控制器方法形参上,用于接收ajax发送来的json请求,并封装到形参对象中

8.@RequestBody

配置在控制器方法返回值中,用于响应ajax请求,可以将方法返回值对象转换为json字符串响应给浏览器

9.SessionStatus:

控制器方法形参,可以用于清空session

package cn.it.demo.controller;
import cn.it.demo.domain.User;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;


/**
 * 6.@SessionAttributes 需要配合Mode对象一起使用 
 *                      1)将model对象中的数据存入到session域中 names:
 *                      2)接收string类型数组 
 *                      3)取值:从model对象中获取 model对象中的key
 */
@Controller
@SessionAttributes(names= {"user","user1"})
public class userController {

    @RequestMapping(value = "/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        User userDB = getUserFormDB();
        model.addAttribute("user", userDB);
        model.addAttribute("user1", userDB);
        return "redirect:viewShow.jsp";
    }

    /**
     * 1.@RequestParam : 用于方法形参与前台传递参数不一致时的转换,
     *                 当配置类该注解时,传递参数必须和该注解中的value一致
     *               1).value :input表单传递的参数名称 name (需要和value一样)
     *               2).required : 配置当前参数是否必须 true:请求必须要携带name属性 false:有没有都可以
     *               3).defaultValue : 指定默认值 当参数没有传递值的时候,使用此默认值
     *               4).name: 和value的功能一样,可以混用
     */
    @RequestMapping("/RequestParam")
    public String testRequestMapping(@RequestParam(defaultValue = "cting", value = "name") String username) {
        System.out.println(username);
        return "success";
    }

    /**
     * 2.@CookieValue 从Cookie中获取指定的属性值 ,配置到方法参数上 
     *               1).value :value : cookie的名称 
     *               2).required : 配置当前参数是否必须 true:请求必须要携带name属性 false:有没有都可以
     *               3).defaultValue : 指定默认值 当参数没有传递值的时候,使用此默认值
     */
    @RequestMapping("/servletCookie")
    public String testCookieValue(@CookieValue( "JSESSIONID") String cookie) {
        System.out.println(cookie);
        return "success";
    }

    /**
     * 3.@RequestHeader * 配置到方法参数上 从请求中获取指定的头信息
     *            1).value :value : header中头信息的名称
     *            2).required : 配置当前参数是否必须 true:请求必须要携带name属性 false:有没有都可以
     *            3).defaultValue : 指定默认值 当参数没有传递值的时候,使用此默认值
     */
    @RequestMapping(value = "/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Host") String sessionId) {
        System.out.println(sessionId);
        return "success";
    }

    /**
     * 使用占位符的形式描述id:{id}
     * 
     * 4.@PathVariable : 从占位符中获取数据的 value : 占位符中的属性名
     *           1).value :从占位符中获取数据的 value : 占位符中的属性名
     *           2).required : 配置当前参数是否必须 true:请求必须要携带name属性 
     *                                           false:有没有都可以
     */

    @RequestMapping(method = RequestMethod.POST, value = "/user/{id}")
    public String delUser(@PathVariable("id") String uid) {
        System.out.println("del:" + uid);
        return "success";
    }
    /*
     * @RequestMapping(method=RequestMethod.GET,value="/user/{id}") public String
     * findUser(@PathVariable("id")String uid,String username) {
     * System.out.println("find"+uid); System.out.println(username); return
     * "success"; }
     */




    /**
     * 5.
     *  第一步:@ModelAttribute 需要配置到方法上
     *                          此方法,在执行控制器方法之前执行
     *  第二步:@ModelAttribute 需要配置到控制器方法形参上,
     *                          从前置方法封装的model对象中获取数据
     *  1)Model(spring提供的对象)  和  request 代表含义类似
     *       model中数据最终存入到request域中
     *  2)Model配置到方法参数中,在方法体中直接使用
     *      addAttribute("key","value");
     *  3)@ModelAttribute :
     *      中这些方法的执行顺序
     *          modelAttributeTest  -- updateUser(控制器方法)
     *      * 全部绑定到一次请求中
     */
    //第一、modelMap
    @ModelAttribute
    public void modelAttributeTest(User user,Model model) {
        //查询数据库
        System.out.println("也发发起请求参数 : " + user);
        User dbUser = this.getUserFormDB();
        model.addAttribute("dbUser", dbUser);
        //request.setAttribute("dbUser", dbUser);//也可以直接放入request中
    }

    //第二、@ModelAttribute 配置到方法参数中,从前置方法封装的model对象中获取数据
    @RequestMapping("/updateUser")
    public String updateUser(@ModelAttribute(value="dbUser")  User dbUser) {
        // username = 张三 ,修改  age = 1;
        System.out.println("从数据库查询的user对象:" + dbUser);
        //1.修改用户属性
        //2.更新数据库
        return "success";
    }
    /**
     *7.SessionStatus:控制器方法形参,可以用于清空session
     */
    @RequestMapping(value = "/clearSession")
    public String clearSession(SessionStatus sessionStatus) {
        sessionStatus.setComplete();
        return "loginSuccess";
    }

    /**
     *通过session模拟登录
     */
    @RequestMapping(value = "/login")
    public String login(User user, HttpSession session) {
        User userDB = findUser(user.getUsername());
        session.setAttribute("user", userDB);
        User u = (User)session.getAttribute("user");
        System.out.println(u.getAge());
        System.out.println(userDB);
        return "loginSuccess";
    }

    /**
     *通过@SessionAttributes配合model模拟登录
     */
    @RequestMapping(value = "/login1")
    public String login1(User user, Model model) {
        User userDB = findUser(user.getUsername());
        System.out.println(userDB);
        model.addAttribute("user", userDB);
        model.addAttribute("user1", userDB);
        return "loginSuccess";
    }


    // 模拟登录获取用户信息
    private User findUser(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(28);
        return user;
    }

    //从数据库中查询用户
    private User getUserFormDB() {
        User user = new User();
        user.setUsername("张三");
        user.setPassword("123456");
        user.setAge(121);
        return user;
    }
 }

二 restFull常用注解

一、 restFull :url的连接风格

1.通过不同的请求方式get、post、delete、put定位同模块儿的增删改查
2.配合@PathVariable从参数的站位符中获取请求参数 使得url变得更简洁明了 HTTP协议里面,
四个表示操作方式的动词:GET、POST、PUT、DELETE,
它们分别对应四种基本的操作,
GET用来获取资源,
POST用来新建资源,
PUT用来更新资源,
DELETE用来删除资源。

示例:

—— /order/1 HTTP GET:得到id=1的order
—— /order/1 HTTPDELETE:删除id=1的order
—— /order/1 HTTP PUT:更新id=1的order
—— /order HTTP POST:新增order

@Path

标注class时,表明该类是个资源类,
凡是资源类必须使用该注解 标注method时,
表示具体的请求资源的路径 注解位置:类注解、方法注解

@GET @POST @PUT @DELETE

指明接收HTTP请求的方式属于get,post,put,delete中的哪一种,
具体指定请求方式,是由客户端发起请求时指定。
注解位置:方法注解

@Consumes

指定HTTP请求的MIME类型,默认是*/*,表示任意的MIME类型。 该注解支持多个值设定,可以使用MediaType来指定MIME类型。

MediaType的类型大致有:
application/xml
application/atom+xml
application/json
application/svg+xm
l application/x-www-form-urlencoded
application/octet-stream
multipart/form-data
text/plain text/xml
text/html 注解位置:方法注解

示例

@Path("{username"}) 
@Consumes({MediaType.APPLICATION_JSON})
public User getUser(@PathParam("username") String userName) { 
    ... 
}
@Produces

指定HTTP响应的MIME类型,默认是*/*,表示任意的MIME类型。
同Consumes使用MediaType来指定MIME类型。
注解位置:方法注解

示例

@Path("{username"}) 
@Consumes({MediaType.APPLICATION_JSON})
@Produces(MediaType.APPLICATION_JSON) 
public User getUser(@PathParam("username") String userName) { 
    ... 
}
@PathParam

配合@Path进行使用,可以获取URI中指定规则的参数。 注解位置:参数注解

示例

@GET 
@Path("{username"}) 
@Produces(MediaType.APPLICATION_JSON) 
public User getUser(@PathParam("username") String userName) { 
    ... 
} 


/* 浏览器请求http://ip:port/user/jack时,userName值为jack。  
 注意,这里的username并不是说Key是username,
 value是jack而是说/usr/后面跟着的东西就是username,这里username只是个变量*/
@QueryParam

用于获取GET请求中的查询参数,实际上是url拼接在?后面的参数。
注解位置:参数注解

示例

@GET 
@Path("/user") 
@Produces("text/plain") 
public User getUser(@QueryParam("name") String name, 
                    @QueryParam("age") int age) { 
    ... 
} 

 //当浏览器请求http://ip:port/user?name=rose&age=25时,
 //name值为rose,age值为25。如果需要为参数设置默认值,可以使用@DefaultValue
@FormParam

用于获取POST请求且以form(MIME类型为application/x-www-form-urlencoded)方式提交的表单的参数。
注解位置:参数注解

示例

@POST
@Consumes("application/x-www-form-urlencoded") 
public void post(@FormParam("name") String name) { 
    ...
} 


 // 这应该是提交form表单中常见的方式,就不详述了。
@FormDataParam

用于获取POST请求且以form(MIME类型为multipart/form-data)方式提交的表单的参数,通常是在上传文件的时候。
注解位置:参数注解

@HeaderParam

用于获取HTTP请求头中的参数值。 注解位置:参数注解

示例

@GET 
@Path("/user/get") 
public Response getUser(@HeaderParam("user-agent") String userAgent) { 
  ...
} 
// 这里获取user-agent的值
@CookieParam

用于获取HTTP请求cookie中的参数值。 注解位置:参数注解

@GET
public String callService(@CookieParam("sessionid") String sessionid) {
  ...
}
@MatrixParam

可以用来绑定包含多个property (属性)=value(值)
方法参数表达式,用于获取请求URL参数中的键值对,必须使用";"作为键值对分隔符。 注解位置:参数注解

示例

@Path("/books")
public class BookService {
    @GET
    @Path("{year}")
    public Response getBooks(@PathParam("year") String year,
            @MatrixParam("author") String author,
            @MatrixParam("country") String country) {
	...
    }
}
// 请求1:“/books/2012/”, 解析结果为:年份:2012,作者:null,国家:null
// 请求2:“/books/2012;author=andih”, 解析结果为:年份:2012,作者:andih,国家:null

注意MatrixParam与QueryParam的区别:
QueryParam请求url的格式为: url?key1=value1&key2=value2&…
MatrixParam请求url的格式为: url;key1=value1;key2=value2;
@DefaultValue

配合前面的参数注解等使用,用来设置默认值,如果请求指定的参数中没有值,通过该注解给定默认值。 注解位置:参数注解

示例

@POST
@Path("/user/add")
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Produces({MediaType.APPLICATION_JSON})
public Response addUser(@FormParam("username") String userName, @DefaultValue("0") @FormParam("age") int age,@DefaultValue("1") @FormParam("sex") int sex){
    ...
}


 注意:DefaultValue指定的值在解析过程中出错时(@DefaultValue(“test”)  @QueryParam(“age”)
 int age),将返回404错误。
@BeanParam

如果传递的较多,使用@FormParam等参数注解一个一个的接收每个参数可能显得太臃肿,可以通过Bean方式接收自定义的Bean,在自定义的Bean中字段使用@FormParam等参数注解。只需定义一个参数接收即可。
注解位置:参数注解

示例

public class MyBean {
   @FormParam("myData")
   private String data;
   @HeaderParam("myHeader")
   private String header;
   @PathParam("id")
   public void setResourceId(String id) {...}
   ...
 }

 @Path("myresources")
 public class MyResources {
   @POST
   @Path("{id}")
   public void post(@BeanParam MyBean myBean) {
	...
   }
   ...
 }
@Context

用来用来解析上下文参数,和Spring中的AutoWired效果类似。通过该注解可以获取ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等信息。
注解位置:属性注解,参数注解

示例

@Path("/user") 
publicclass Resource { 
    @Context 
    HttpServletRequest req; 
    @Context 
    ServletConfig servletConfig; 
    @Context 
    ServletContext servletContext; 

    @GET 
    public String get(@Context HttpHeaders hh) { 
        MultivaluedMap<String, String> headerParams = hh.getRequestHeaders(); 
        Map<String, Cookie> pathParams = hh.getCookies(); 
    } 
} 
@Encoded

禁止解码,客户端发送的参数是什么样,服务器就原样接收。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值