简单描述:因为前后端分离,开发完模块之后,接到team leader的指令,我这个渣渣javaer需要给前端人员返回一个接口,具体内容是课程列表json和分类列表json。emmmm,第一次写接口,心理是有点啪啪啪的,手误,怕怕的,完全不知道应该怎么写。不过,程序员从来都不会说做不到,能做到的是想方设法的去搞定他。最终,还是把它搞出来了,哈哈哈哈,experience有增长了一点点。

过程:

创建实体类,并且使用@Table和数据库表相对应,@Getter@Setter都是lombok包下的 @Id@Table@Column是javax.persistence包下的

//实体类Course @Column中的是表字段 要注意的是必须和表完全对应,表里有多少字段,类就有多少属性 
@Getter
@Setter
@Table(name = "table_course")
public class Course {
@Id
@Column(name = "course_id")
private String courseId;
@Column(name = "course_name")
private String courseName;
@Column(name = "course_code")
private String courseCode;
@Column(name = "course_type")
private String courseType;
@Column(name = "is_del")
private String isDel;//未删除 1 已删除 0
}  //实体类Dictionary
import lombok.Getter;
import lombok.Setter; import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table; @Getter
@Setter
@Table(name = "table_dict")
public class Dictionary {
@Id
@Column(name = "dict_id")
private String dictId;
@Column(name = "dict_name")
private String dictName;
@Column(name = "dict_code")
private String dictCode;
@Column(name = "sort_no")
private String sortNo;
@Column(name = "parent_id")
private String parentId;
@Column(name = "description")
private String description;

Controller层

//controller层 
import xxx.xx.xxxxx.xxxx.xxxxx.ResultDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import java.util.List;
import java.util.Map;
@Api(value = "CourseController",tags = "课程相关查询")
@RestController
@RequestMapping("/course")
public class CourseController extends BaseController {
@Autowired
private CourseService courseService; @ApiOperation(value = "获取课程列表" notes= "获取课程列表")
@RequestMapping(value = "/queryList", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public ResultDto queryList(){
List<CourseVo> list = null;
try {
list = courseService.queryList();
if(list != null){
if(list.size()<1){
return ResultDto.success("返回结果无内容");
}
}
} catch (Exception e) {
e.printStackTrace();
return ResultDto.error();
}
return ResultDto.success(list);
} @ApiOperation(value = "获取课程分类列表",notes = "根据课程编码查询")
@RequestMapping(value = "/getCourseType",method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public ResultDto getCourseType(String code){
List<Map<String,String>> list = null;
try {
if (!"".equals(code) && code != null) {
list = courseService.getCourseType(code);
if(list != null){
if(list.size()<1){
return ResultDto.success("返回结果无内容");
}
}
}else{
return ResultDto.error("参数错误");
}
} catch (Exception e) {
e.printStackTrace();
return ResultDto.error();
}
return ResultDto.success(list);
}

Service层

//service层
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; @Service
public class CourseService {
@Resource
private CourseMapper courseMapper;
@Resource
private DictionaryMapper dictionaryMapper; public List<CourseVo> queryList()throws Exception{
Example example = new Example(Course.class);
example.createCriteria().andEqualTo("isDel",1);
List<Course> list = courseMapper.selectByExample(example);
List<CourseVo> reList = new ArrayList<>();
if (list !=null){
for(Course obj:list){
CourseVo course = new CourseVo();
BeanUtils.copyProperties(obj,course);
reList.add(course);
}
}
return reList;
} public List<Map<String,String>> getCourseType(String code) throws Exception{
Dictionary obj = new Dictionary();
obj.setDictCode(code);
Dictionary dict = dictionaryMapper.selectOne(obj);
Example example = new Example(Dictionary.class);
example.createCriteria().andEqualTo("parentId",dict.getDictId());
List<Dictionary> list = DictionaryMapper.selectByExample(example);
List<Map<String,String>> reList = new ArrayList<>();
if(list != null){
for(Dictionary test:list){
Map<String,String> map = new HashMap<>();
map.put(test.getDictName(),test.getDictCode());
reList.add(map);
}
}
return reList;
}

对应的Mapper接口

//CourseMapper接口
import xxx.xx.xxxxxx.xxxx.util.MyMapper; public interface CourseMapper extends MyMapper<Course> {
}  //DictionaryMapper接口
import xxx.xx.xxxxxx.xxxx.util.MyMapper; public interface DictionaryMapper extends MyMapper<Dictionary>{
}

MyMapper<T>

//MyMapper接口
/*
* The MIT License (MIT)
*
* Copyright (c) 2014-2016 abel533@gmail.com
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/ package xxx.xx.xxxxxx.xxxxx.util; import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper; /**
* 继承自己的 MyMapper
*/
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
//TODO
//FIXME 特别注意,该接口不能被扫描到,否则会出错

注意:可以使用google浏览器的postman插件  或者 火狐浏览器的RestClient插件来进行接口的测试工作。输入地址的时候要确保和配置文件里的端口号对应。

总结:第一次开发接口,能顺利的搞出来真的是挺开心的,以前的时候就在好奇,经常听接口开发之类的,也会有疑问 如果自己来开发接口的话能不能开发出来。

相关注解详细参考:https://blog.csdn.net/xiaojin21cen/article/details/78654652

浅谈rest風格的接口开发的更多相关文章

  1. 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  2. 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程

    JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...

  3. 浅谈Bootstrap自适应功能在Web开发中的应用

    随着移动端市场的强势崛起,web的开发也变得愈发复杂,对于个体开发者来说,自己开发的网站,在电脑.手机.Pad等上面都要有正常的显示以及良好的用户体验.如果每次都要自己去调整网页去匹配各个不同的客户端 ...

  4. 浅谈C#抽象类和C#接口

    原文地址:http://www.cnblogs.com/zhxhdean/archive/2011/04/21/2023353.html 一.C#抽象类: C#抽象类是特殊的类,只是不能被实例化:除此 ...

  5. 浅谈Nutch插件机制(含开发实例)

    plugin(插件)为nutch提供了一些功能强大的部件,举个例子,HtmlParser就是使用比较普遍的用来分析nutch抓取的html文件的插件. 为什么nutch要使用这样的plugin系统? ...

  6. Android安全开发之启动私有组件漏洞浅谈

    0x00 私有组件浅谈 android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面.很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击.但是开发者不一定所有的安全问题都能 ...

  7. Salesforce 生命周期管理(一)应用生命周期浅谈

    本篇参考: https://trailhead.salesforce.com/en/content/learn/trails/determine-which-application-lifecycle ...

  8. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...

  9. 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载

    转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...

随机推荐

  1. 1.nginx_add_after_body

    语法: add_before_body uri;默认值: —配置段: http, server, location发起一个子请求,请求给定的uri,并且将内容追加到主题响应的内容之前. 语法: add ...

  2. Mac打开Terminal报错-bash : : command not found

    问题描述: Mac系统在打开Terminal的时候,报错-bash : : command not found. 问题分析: 报错并不影响Terminal的使用,于是忽略不计.但是在修改.bash_p ...

  3. cas-5.3.x接入REST登录认证,移动端登录解决方案

    一.部署cas-server及cas-sample-java-webapp 1.克隆cas-overlay-template项目并切换到5.3分支 git clone git@github.com:a ...

  4. MT【324】增量代换

    实数$a,b,c$满足$a^2+b^2+c^2=1$求$f=\min\{(a-b)^2,(b-c)^2,(c-a)^2\}$的最大值 分析:由对称性不妨设$c\ge b\ge a$,令$b-a=s,c ...

  5. <Android基础> (七)内容提供器

    第七章 内容提供器 7.1 内容提供器(Content Provider) 主要应用于在不同的应用程序之间实现数据共享功能.允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性. 7.2 ...

  6. placeholder中文字添加换行方法

    需求: 文本域内的提示文字两行显示 解决方案: 表示回车 表示换行 <textarea id="textarea" maxlength="22" plac ...

  7. Educational Codeforces Round 63 (Rated for Div. 2)

    传送门 A. Reverse a Substring 题意: 给你一串 s,让你判断能否通过反转区间[l,r]的元素,使得反转后的串的字典序小于 s: 如果能,输出 "YES",并 ...

  8. Hadoop-2.7.3-src 源码编译

    Hadoop-2.7.3 编译 1.需要环境梳理 BUILDING JDK1.7+ maven 3.0 or later findbugs 1.3.9 protocolBuffer 2.5.0 cma ...

  9. 010-3 Socket协议ProtocolType

    ProtocolType成员 成员名称 说明 Ggp 网关到网关协议. Icmp Internet 控制消息协议. IcmpV6 IPv6 的 Internet 控制消息协议. Idp Interne ...

  10. Spring rabbitMq 中 correlationId或CorrelationIdString 消费者获取为null的问题

    问题 在用Spring boot 的 spring-boot-starter-amqp   快速启动 rabbitMq 是遇到了个坑 消费者端获取不到:correlationId或Correlatio ...