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. 20145304 Exp6 信息搜集与漏洞扫描

    20145304 Exp6 信息搜集与漏洞扫描 实验后回答问题 (1)哪些组织负责DNS,IP的管理. NSI负责Internet顶级域名系统的注册.协调与维护,IAIA负责Internet的地址资源 ...

  2. 20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145208 蔡野<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode的获取代码 我使用了许心远同学博客中的代码 ...

  3. 格子中输出|2015年蓝桥杯B组题解析第四题-fishers

    StringInGrid函数会在一个指定大小的格子中打印指定的字符串. 要求字符串在水平.垂直两个方向上都居中. 如果字符串太长,就截断. 如果不能恰好居中,可以稍稍偏左或者偏上一点. 下面的程序实现 ...

  4. C#学习笔记(十三):继承

    继承 object是引用类型 public:最高权限,公开的 Protected:外部不可以访问 Internal:类的默认访问是什么作用域 Private:类成员默认   基类实例:可以通过base ...

  5. Python中通过csv的writerow输出的内容有多余的空行

    第一种方法 如下生成的csv文件会有多个空行 import csv #python2可以用file替代open with open("test.csv","w" ...

  6. python 字符串输出转义{}

    >>> print ("{} 对应的位置是 {{0}}".format("runoob")) runoob 对应的位置是 {}

  7. python 集合取最大最小值

    #Create a set seta = , , , , , ]) #Find maximum value print(max(seta)) #Find minimum value print(min ...

  8. Eclipse如何快速改变主题颜色

    厌倦了Eclipse的白底黑子,我们来更换下Eclipse的主题颜色,让眼睛更舒服一点 首先先进入网址:http://eclipsecolorthemes.org/ 选择一个主题进入,点击进入如下: ...

  9. Django2.0 URL配置

    一.实例 先看一个例子: from django.urls import path from . import views urlpatterns = [ path('articles/2003/', ...

  10. js 中的 堆栈

    1.含义及对比 堆和栈都是运行时内存中分配的一个数据区,因此也被称为堆区和栈区: 二者存储的数据类型和处理速度不同: 堆(heap)用于复杂数据类型(引用类型)分配空间,例如数组对象.object对象 ...