SpringMVC实现RESTful服务

  

这里只说service,controller层的代码。Mapper层则直接继承Mapper<T>则可以,记住mybatis-config.xml一定要配置分页插件和mapper类的插件。

  1.查询所有用户

  service:

     @Autowired
private IUserMapper userMapper; @Override
public EasyUIResult getAllUser(Integer page, Integer rows) {
// TODO Auto-generated method stub // 后台帮我们封装了一个page并且直接存到本地线程
PageHelper.startPage(page, rows);
Example example = new Example(User.class);
example.setOrderByClause("updated desc");
List<User> list = userMapper.selectByExample(example);
PageInfo<User> pageInfo = new PageInfo<>(list);
return new EasyUIResult(pageInfo.getTotal(), pageInfo.getList());
}

  controller:

     /**
* 查询所有用户 返回数据类型为:json格式
*
* @param page
* @param rows
* @return
*/
@RequestMapping(value = "list", method = { RequestMethod.POST })
public @ResponseBody EasyUIResult finAllUser(@RequestParam(value = "page", defaultValue = "") Integer page,
@RequestParam(value = "rows", defaultValue = "") Integer rows) {
return userService.getAllUser(page, rows);
}

    2.根据用户id查询用户信息

  service:

     @Override
public User queryUserById(Long id) {
// TODO Auto-generated method stub
return userMapper.selectByPrimaryKey(id);
}

  cotroller:

 @Controller
@RequestMapping("user/rest")
public class RestUserController { @Autowired
private IUserService userService; /**
* 根据id查询用户信息
*
* @param id
* @return
*/
@RequestMapping(value = "{userId}", method = RequestMethod.GET)
public ResponseEntity<User> queryUserById(@PathVariable(value = "userId") Long id) {
try {
User user = userService.queryUserById(id);
if (user == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
// return ResponseEntity.ok(user);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// return ResponseEntity.status(500).body(null);
// 系统内部异常
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}

    3.添加一个用户

  service:

 @Override
public Boolean saveUser(User user) {
// TODO Auto-generated method stub
return userMapper.insertSelective(user) == 1;
}

  controller:

     /**
* 添加一个用户
*
* @param user
* @return
*/
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Void> addUser(User user) {
try {
userService.saveUser(user);
return ResponseEntity.status(HttpStatus.CREATED).build();
// return ResponseEntity.ok(user);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}

  4.修改用户

  service:

 @Override
public boolean updateUsers(User user) {
// TODO Auto-generated method stub
// 修改用户所有信息
// userMapper.updateByPrimaryKey(User);
// 修改不为空的字段
// userMapper.updateByPrimaryKeySelective(record);
return userMapper.updateByPrimaryKey(user) == 1;
}

  controller:

    /**
* 跟新用户
*
* @param user
* @return
*/
@RequestMapping(method = RequestMethod.PUT)
public ResponseEntity<Void> updateUser(User user) {
try {
boolean b = userService.updateUsers(user);
if (b) {
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
// return ResponseEntity.ok(user);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}

  5.删除

  service:

     @Override
public boolean deleteUser(Long id) {
// TODO Auto-generated method stub
return userMapper.deleteByPrimaryKey(id) == 1;
}

  controller:

     /**
* 删除一个用户
*
* @param id
* @return
*/
@RequestMapping(method = RequestMethod.DELETE)
public ResponseEntity<Void> deleteUser(@RequestParam(value = "id", defaultValue = "0") Long id) {
try {
if (id == 0) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
boolean b = userService.deleteUser(id);
if (b) {
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
// return ResponseEntity.ok(user);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}

  delete删除时比较特殊:一定要注意

 

  

  进行删除和修改时,要在web.xml中配置过滤器(补充):

 <!--
将POST请求转化为DELETE或者是PUT
要用_method指定真正的请求参数
-->
<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>
 <!-- 解决PUT请求无法提交表单数据的问题 -->
<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>

  大功告成!!

SpringMVC实现RESTful服务的更多相关文章

  1. 基于springMVC的RESTful服务实现

    一,什么是RESTful RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映 ...

  2. 实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务

    本文为实战SpringCloud响应式微服务系列教程第九章,讲解使用Spring WebFlux构建响应式RESTful服务.建议没有之前基础的童鞋,先看之前的章节,章节目录放在文末. 从本节开始我们 ...

  3. 基于 springMVC 的 RESTful HTTP API 实践(服务端)

    理解 REST REST(Representational State Transfer),中文翻译叫"表述性状态转移".是 Roy Thomas Fielding 在他2000年 ...

  4. spring 3.0 应用springmvc 构造RESTful URL 详细讲解

    在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...

  5. atitit.RESTful服务的概览and框架选型

    atitit.RESTful服务的概览and框架选型 1. REST基础概念: 1 2. URL说明: 1 3.  1 4. RESTful框架选型 2 1. spring mvc( recomm) ...

  6. 使用Spring Security Oauth2完成RESTful服务password认证的过程

            摘要:Spring Security与Oauth2整合步骤中详细描述了使用过程,但它对于入门者有些重量级,比如将用户信息.ClientDetails.token存入数据库而非内存.配置 ...

  7. 应用Spring MVC发布restful服务是怎样的一种体验

            摘要:“约定优于配置”这是一个相当棒的经验,SOAP服务性能差.基于配置.紧耦合,restful服务性能好.基于约定.松耦合,现在我就把使用Spring MVC发布restful服务的 ...

  8. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  9. jersey2.26+spring5+jpa一步步搭建restful服务

    前言 首先,为什么想选择Jersey做restful服务呢?我个人比较喜欢它的插件化设计,可以方便的注入自己的全局处理逻辑.再一个就是可以生成wadl描述文件,供查询服务方法.所以在学习spring的 ...

随机推荐

  1. 20145329 《网络对抗技术》MSF基础应用

    实践目标 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067;(2)一个针对浏览器的攻击,如ms11_050:(3)一个针对客户端 ...

  2. [c/c++]指针(3)

    在指针2中提到了怎么用指针申配内存,但是,指针申配的内存不会无缘无故地 被收回.很多poj上的题都是有多组数据,每次地数组大小会不同,所以要重新申请 一块内存.但是原来的内存却不会被收回,也是说2.3 ...

  3. babun安装,整合到cmder

    babun Babun的特性: 预装了Cygwin以及许多的插件 默认的命令行安装工具,没有管理员权限要求. 预装了 pact工具,一个高级的包管理器,类似 apt-get或yum xTerm-256 ...

  4. 【第十三章】 springboot + lombok

    lombok作用:消除模板代码. getter.setter.构造器.toString().equals() 便捷的生成比较复杂的代码,例如一个POJO要转化成构建器模式的形式,只需要一个注解. 注意 ...

  5. Codeforces Round #527 (Div. 3)

    一场div3... 由于不计rating,所以打的比较浪,zhy直接开了个小号来掉分,于是他AK做出来了许多神仙题,但是在每一个程序里都是这么写的: 但是..sbzhy每题交了两次,第一遍都是对的,结 ...

  6. [BZOJ3609][Heoi2014]人人尽说江南好 结论题

    Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏.     在过去,人们是要 ...

  7. 【TCP/IP详解 卷一:协议】第四章 ARP:地址解析协议 以及其他部分的一些知识

    4.1 引言 数据链路 如以太网(Ethernet) 或者 令牌环网 都有自己的寻址机制(一般为 48 bit 的地址). 一个网络(数据链路层) 可以同时被多个不同的网络使用.比如,一组使用TCP/ ...

  8. Cocos2d-x学习笔记(十一)动作

    动作类Action是一切动作的祖先类.它有三个直接继承子类: FiniteTimeAction受时间限制的动作: Follow精灵跟随精灵的动作: Speed运动速度控制: 而FiniteTimeAc ...

  9. Cocos2d-x学习笔记(三)main方法

    0. UNREFERENCED_PARAMETER(X)避免编译器关于未引用参数的警告. 下边代码用于屏蔽单个函数的警告: #pragma warning( push ) #pragma warnin ...

  10. ubuntu 16.04 kinetic 安装rosbridge

    sudo apt-get install ros-kinetic-rosbridge-server