1.restful概述
REST 仅仅是一种架构的风格,并不是真正的架构,也不是一个软件,而是一种思想。
我们可以基于现有的HTTP、URI、XML、等现有技术来实现REST的风格。而不用去学习任何新的技术。
而学习REST的关键,不是任何的API或者实现方式,而是这种思想。
简单案列测试:
package cn.controller; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import cn.pojo.User; @Controller @RequestMapping("users") public class UserController { /** * restful根据ID查询用户 * @param id * @return */ @RequestMapping(value="{id}" ,method=RequestMethod.GET) public ResponseEntity<User> findUserById(@PathVariable("id") Long id) { User user; try { user = new User(); if (user == null) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } return ResponseEntity.status(HttpStatus.OK).body(user); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } /** * restful 新增用户 * @param user * @return */ @RequestMapping(method=RequestMethod.POST) public ResponseEntity<Void> addUser(User user){ // 输出有乱码 try { System.out.println("新增"); System.out.println(user); return ResponseEntity.status(HttpStatus.CREATED).build(); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } /** * 更新用户 * @param user * @return */ @RequestMapping(method=RequestMethod.PUT) public ResponseEntity<Void> updateUser(User user){ /* * 更新用户时,请求发送成功,但是携带的参数不能接收到 ,因此需要配置过滤器解决PUT方式的请求 * <!-- 解决PUT请求的参数为null问题 --> <filter> <filter-name>HttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>HttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> * */ try { System.out.println("更新用户"); System.out.println(user); return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } /** * 删除用户 * @param id * @return */ @RequestMapping(method=RequestMethod.DELETE) public ResponseEntity<Void> deleteUser(Long id){ /* * 对于delete方式比较特殊 配置过滤器,运用POST方式,携带参数_method:DELETE * 在web.xml配置 * <!-- 通过POST请求传递参数,再 用_method指定要转化的请求方式(DELETE或PUT),最后转为DELETE或PUT请求 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> * */ try { System.out.println("删除用户"); System.out.println("id=" + id); return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } }