SpringMVC实现RESTful服务
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服务的更多相关文章
- 基于springMVC的RESTful服务实现
一,什么是RESTful RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映 ...
- 实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务
本文为实战SpringCloud响应式微服务系列教程第九章,讲解使用Spring WebFlux构建响应式RESTful服务.建议没有之前基础的童鞋,先看之前的章节,章节目录放在文末. 从本节开始我们 ...
- 基于 springMVC 的 RESTful HTTP API 实践(服务端)
理解 REST REST(Representational State Transfer),中文翻译叫"表述性状态转移".是 Roy Thomas Fielding 在他2000年 ...
- spring 3.0 应用springmvc 构造RESTful URL 详细讲解
在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...
- atitit.RESTful服务的概览and框架选型
atitit.RESTful服务的概览and框架选型 1. REST基础概念: 1 2. URL说明: 1 3. 1 4. RESTful框架选型 2 1. spring mvc( recomm) ...
- 使用Spring Security Oauth2完成RESTful服务password认证的过程
摘要:Spring Security与Oauth2整合步骤中详细描述了使用过程,但它对于入门者有些重量级,比如将用户信息.ClientDetails.token存入数据库而非内存.配置 ...
- 应用Spring MVC发布restful服务是怎样的一种体验
摘要:“约定优于配置”这是一个相当棒的经验,SOAP服务性能差.基于配置.紧耦合,restful服务性能好.基于约定.松耦合,现在我就把使用Spring MVC发布restful服务的 ...
- 基于SpringBoot开发一个Restful服务,实现增删改查功能
前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...
- jersey2.26+spring5+jpa一步步搭建restful服务
前言 首先,为什么想选择Jersey做restful服务呢?我个人比较喜欢它的插件化设计,可以方便的注入自己的全局处理逻辑.再一个就是可以生成wadl描述文件,供查询服务方法.所以在学习spring的 ...
随机推荐
- INNODB引擎概述
INNODB存储引擎的历史概述: INNODB存储引擎是OLTP应用中核心表的首选存储引擎. INNODB存储引擎包含在所有mysql数据库的二进制发行版本中.早期其版本随着mysql数据库的更新而更 ...
- Tomcat上发布webservices的war工程,访问异常404
Tomcat上发布webservices的war工程,访问异常404 Tomcat部署正常.war导出工程正常.Tomcat自带的工程可以正常访问: 问题: webservices工程访问异常404 ...
- CSS style 属性
CSS style 属性 定义和用法 必需的 type 属性规定样式表的 MIME 类型. type 属性指示 <style> 与 </style> 标签之间的内容. 值 &q ...
- troubleshooting-When importing query results in parallel, you must specify --split-by.
原因分析 -m 4 \ 导数命令中map task number=4,当-m 设置的值大于1时,split-by必须设置字段(需要是 int 类型的字段),如果不是 int类型的字段,则需要加上参数- ...
- JAVA学习调查问卷——20145101
1.你对自己的未来有什么规划?做了哪些准备? 我希望在未来不管自己是否从事机要工作,都要做一个有能力,对社会能有所贡献的人.所以在现阶段我应该努力学习基础知识,夯实基本功,具备成为合格机要人的素质. ...
- IDEA中使用.ignore插件忽略不必要提交的文件
使用的IDE是IntelliJ IDEA,发现IDEA在提交项目到本地仓库的时候,会把.idea文件夹中的内容也提交上去,这里面放的是一些项目的配置信息,包括历史记录,版本控制信息等.可以不传到Git ...
- 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 1 章 答案
判断对错1.计算机科学是计算机的研究.2.CPU 是计算机的“大脑”.3.辅助存储器也称为 RAM.4.计算机当前正在处理的所有信息都存储在主存储器中.5.语言的语法是它的意思,语义是它的形式.6.函 ...
- spring boot 使用@ConfigurationProperties
有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配 ...
- 关于在iBatis中配置Oracle以及MySQL 自增字段
<insert id="insertPerson" parameterClass="person"> <!-- MySQL数据库自增字段的控制 ...
- Node.js结合Selenium做Web自动化测试
发现腾讯课堂上有个node.js结合Selenium做Web自动化测试的教学视频, 听来感觉不错,一来老师讲的还不错,二来node.js这门语言会越来越热,学会总没什么坏处,三来发现CukeTest这 ...