spring rest

一、Rest的基本原理 (表述性状态转移) rest 与 rpc没有任何关系。RPC是面向服务的,并关注于行为和动作,而REST是面向资源的。

1: 表述性,资源实际上可以用各种形式来进行表述。xml,json,html

2:    状态当使用REST的时候,我们更关注资源的状态

3: REST涉及转移资源数据,它以表述性形式从一个应用转移到了一个应用

总结:rest就是将资源的状态以最合适的形式从服务器端转移到客户端。

二、spring 如何支持rest : 

1、控制器可以处理所有的http 方法 , get、put、delete、post 

2、新的pathvariable 注解使得控制器能处理参数化的URL

3、spring的表单绑定jsp标签库的<form:form>标签以及新的HiddenHttpMethondFilter, 使得通过html表单提交put 和 delete 请求成为可能。

4、通过使用spring的视图和视图解析器,资源可以以各种形式进行表述。xml,json,atom和rss

5、可以使用新的contentnegotiatingviewresolver 来选择最合适客户端

6、基于视图的渲染可以使用@responsebody注解

7、新的@responsebody注解以及httpmethodconverter实现可以传入http数据转化为控制器处理方法

8、resttemplate简化了客户端对rest资源的使用。

restful 和 restless 的url 和 控制器

rest less 的 url 和 控制器

1、restless的url : http://localhost:8080/Spitter/displaySpittle.htm?id=123

 

2、

@Controller

@RequestMapping(“/displaySpitle.html”)

public class DisplaySpittleController {

    private final SpitterService spitterService ;

     @Inject

      public DisplaySpittleController(SpitterService spitterService){

           this. spitterService = spitterService

      }

      

      @RequestMapping(method = RequestMethod.GET)

      public string show spittle(@RequestParam(“id”) long id , Model model)

      {

            model.addAttribute(spitterService.getSpittleByid(id))

            return  “spitter/view”

       }

}

 

restful的url和 控制器

1、http://localhost:8080/Spitter/spittles/123

 

2、

@Controller

@RequestMapping(“/spittles”)

public class SpittleController {

    private SpitterService spitterService;

    

    @Inject

    public SpittleController(SpitterService spitterService){

        this.spitterService = spitterService;

    }

    

    @RequestMapping(value = “/{id}” method = RequestMethod.GET)

     public String getSpittle(@PathVariable(“id”) long id , Model model){

            model.addAttribute(spitterService.getSpittleById(id));

            return “spittles/view”

     }

}

 

rest 动作

1、对于任意i给定的资源,最常见的操作是在服务器上对资源进行创建,索引,更新,删除

2、每个http方法具有两个特性,安全性和幂等性。 

3、http提供了多个方法来操作资源

安全: 不改变资源状态

幂等: 一次请求和多次请求具有相同的作用

 

GET方法:  执行读取操作。是安全,是幂等。

POST方法:通常用于更新和创建操作。不安全,不幂等。

PUT方法:  通常用于更新和创建操作。不安全,幂等

DELELE方法: 删除操作,不安全,幂等

OPTIONS方法: 请求与服务器通信可用的选项,是安全,是幂等

HEAD方法: 类似GET,只返回头部信息 是安全,是幂等

TRACE 方法: 将请求体的内容  是安全,是幂等

 

4、使用PUT更新资源

get 请求将资源的状态从服务器转移到客户端,而put将资源的状态从客户端转移到服务器上。

 

@RequestMapping(value="/{id}",method=RequestMethod.PUT)

@ResponseStatus(HttpStatus.NO_CONTENT)

public void putSpittle(@PathVariable("id") long id , @Valid Spittle spittle){

             spitterService.saveSpittle(spittle);

 

5、处理Delete请求: RequestMethod.delete

 

6、使用post创建资源 :   可以完成其他http方法无法完成的工作

方法的requestmapping没有value的时候,匹配类的value

@RequestMapping(method = RequestMethod.POST)

@ResponseStatus(HttpStatus.CREATED)

public @ResponseBody Spittle createSpittle(@Valid Spittle spittle,BindingResult result,HttpServleResponse response){

         if(result.hasErrors()){

              throw new BindException();

         }

         

         spitterService.saveSpittle(spittle);

         response.setHeader("Location"," /spittles/" + spittle.getId()+"");

         return spittle

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自kayak2015.iteye.com/blog/2298175