@ApiOperation(value = "3.3.5.1 查询产品详情", notes = "根据产品编码查询产品详情") 复制代码
@ApiOperation不是spring自带的注解,是swagger里的 com.wordnik.swagger.annotations.ApiOperation
;
@ApiOperation为添加的API相关注解,个参数说明如下: @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;其他参数可参考源码;
Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。
Swagger 的目标是为REST APIs定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能。 使用时需要集成Swagger-springmvc到我们的项目中。
如果想获得如下页面,还需要集成Swagger-UI。
@RequestMapping(value = "getprodinfo", method = RequestMethod.POST) 复制代码
RequestMapping是一个用来处理请求地址映射的注解。
1、value:指定请求的实际地址
URL: /api/dm/getprodinfo这个地址是接口规范里提供的接口路径,value与接口相对应
2、method: 指定请求的method类型, GET、POST、PUT、DELETE等;
public String getProdInfo(@RequestBody String msg) { 复制代码
1、 @RequestBody
需要把所有请求参数作为 json
解析,因此,不能包含 key=value
这样的写法在请求url中,所有的请求参数都是一个 json
。
2、直接通过浏览器输入url时, @RequestBody
获取不到 json
对象,需要用java编程或者基于 ajax
的方法请求,将Content-Type设置为 application/json
(关于 application/json
参考 www.cnblogs.com/Zhaols/p/62… )
String content = JSON.parseObject(msg).getString(IConstant.CONTENT); String prodCode = JSON.parseObject(content).getString(IConstant.PRODCODE); 复制代码
用户发送请求的参数是prodCode
方法 getProdInfo
的入参是msg,即Msg,想得到content需要将msg解析出来。
JSON.parseObject
是将Json字符串转化为相应的对象;
.getString
是取得string类型数据用。
IConstant.CONTENT
是在 package com.cmge.foundation.contants
定义的接口静态变量,放在同一个类中管理可以使代码更加清晰,定义形式如下:
/** * 接口静态变量 */ public class IConstant { /** * 消息体 */ public static final String CONTENT="content"; } 复制代码
CorProductNewInfo corProduct = iCorProductService.findCorProductByProdCode(prodCode); 复制代码
1、 CorProductNewInfo
是在 package com.cmge.foundation.vo.cor;
中定义的一个类:
这个类与数据库里的cor_product表相对应,定义了一些变量,并且每个变量有其默认的get、set方法。
package com.cmge.foundation.vo.cor; public class CorProductNewInfo { private Integer id; private String prodCode; …… public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getProdCode() { return prodCode; } public void setProdCode(String prodCode) { this.prodCode = prodCode; } 复制代码
数据库中的字段:
2、 findCorProductByProdCode
是在 package com.cmge.foundation.service.cor;
中定义的接口:
接口需要实现,此接口是在 package com.cmge.foundation.impl.cor;
中实现的。
这里传入的参数是proCode,与前面相对应。
return的同名方法属于 corProductMapper
,是dao层的,dao层的mapper.java文件为其提供定义的interface,其实现直接是数据库的查询,在.xml文件中。复制此方法名称,在CorProductMapper.xml文件中找到此方法。
corProductMapper与CorProductMapper文件对应上是通过如下代码(与上一段代码在同一个类里)
在 CorProductMapper.xml
文件中的此方法,可以完成对数据库的查询:
CorProductMapper.java
是dao层的java文件。
CorProductMapper.xml
与 CorProductMapper.java
是通过mybatis结合的,.java文件也有同名函数,如下:
CorProductNewInfo
这里回头与service里的方法对比一下:
modifyTime 和 createTime需要单独赋值,因为文档如下:
前面所有获取的数据都是prodInfo中的,属于数据表cor_product,而这个表中并没有这两个时间,这两个时间与proInfo同属于content,所以需要单独赋值。
在第一句的声明中,reContent就是一个容器,主要调用put()、get()方法;
reContent.put("user", obj); 复制代码
obj是之前声明的一个类的对象,比如为user1,那么就是把user这个对象放到了map容器中了,其中user只是对象的代号。
在调用的时候取出,代码为
reContent.get(user); 复制代码
参数是前面写的代号,得到的是user1这个对象。
注意最后一句要把 reContent
成功返回