@DubboService(interfaceClass = PlatBaseInfoService.class,version = “1.0”)
在SpringBoot中整合Dubbo的一个注解:
@dubboservice注解是用于标记Dubbo服务提供者的注解。当一个Java类上添加了该注解后,Dubbo会将该类暴露为一个Dubbo服务。通过该注解,我们可以配置服务的接口名、版本号、超时时间等信息。Dubbo框架会扫描所有被该注解标记的类,并将其暴露为Dubbo服务。服务消费者可以通过Dubbo框架的相关功能,调用这些暴露的Dubbo服务
@DubboReference(interfaceClass = PlatBaseInfoService.class,version = “1.0”)
@dubboreference是Dubbo框架中用于定义服务引用的注解,它的作用是标识服务的引用。通过使用@dubboreference注解,我们可以在应用程序中声明一个对Dubbo服务的引用,从而让Dubbo框架自动为我们生成服务的代理对象。这样我们就可以像调用本地对象一样调用远程服务,无需关心底层的网络通信和协议转换等复杂细节。@dubboreference注解的使用非常简单,只需要在需要引用服务的成员变量上加上该注解即可。
@RequestMapping和@GetMapping
@RequestMapping和@GetMapping都是Spring MVC中的注解,用于处理HTTP请求。
@RequestMapping是一个通用的注解,可以用于处理任何类型的HTTP请求,包括GET、POST、PUT、DELETE等。它可以用于类级别和方法级别,用于指定请求的URL路径和请求方法。
@GetMapping是@RequestMapping的一个特殊化版本,用于处理HTTP GET请求。它只能用于方法级别,用于指定请求的URL路径。相比于@RequestMapping,它更加简洁明了,也更加易于使用。
总的来说,如果只需要处理HTTP GET请求,建议使用@GetMapping;如果需要处理其他类型的HTTP请求,可以使用@RequestMapping。
@RestController和@Controller
@RestController注解是Spring4.0版本引入的新特性,它的作用是将该类下的所有方法的返回值都默认为JSON格式的数据。这意味着在使用@RestController注解标注的类中,所有方法的返回值都会被自动转换为JSON格式并返回给客户端。
而@Controller注解则是Spring MVC框架中的一个基本注解,它的作用是标识一个类为控制器,并且该类中的方法通常用来处理HTTP请求和响应。在使用@Controller注解的类中,通常需要配合使用其他注解来实现请求参数绑定、视图渲染等功能,比如@RequestMapping、@RequestParam、@ModelAttribute等。
因此,如果你的控制器类主要用来返回JSON格式的数据,那么就应该使用@RestController注解;如果你的控制器类主要用来处理HTTP请求和响应,并且需要使用视图渲染等功能,那么就应该使用@Controller注解。
@API
是用在类上,表明是swagger资源,拥有两个主要属性:value、tags
用在请求的类上,表示对类的说明,也代表了这个类是swagger2的资源
参数:
@ApiOperation()
用于方法,表示一个http请求访问该方法的操作
参数:
eg:
import com.bjpowernode.api.pojo.BaseInfo;
import com.bjpowernode.front.view.RespResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "平台信息功能")
@RestController
@RequestMapping("/v1")
public class PlatInfoController extends BaseController {
/*平台基本信息*/
@ApiOperation(value = "平台三项基本信息",notes = "注册人数,平均的利率,总投资金额")
@GetMapping("/plat/info") // 访问/v1/plat/info
public RespResult queryPlatBaseInfo(){
//调用远程服务
BaseInfo baseInfo = platBaseInfoService.queryPlatBaseInfo();
RespResult result = new RespResult();
result.setCode(1000); //表示成功
result.setMsg("查询平台信息成功");
result.setData(baseInfo);
return result;
}
}
BaseController
在Controller层开发中,继承BaseController,使用BaseController中的通用功能简化开发。
eg:
package com.bjpowernode.front.controller;
import com.bjpowernode.api.service.*;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.Resource;
public class BaseController {
//声明公共的方法,属性的等
@Resource
protected StringRedisTemplate stringRedisTemplate;
//平台信息服务
@DubboReference(interfaceClass = PlatBaseInfoService.class,version = "1.0")
protected PlatBaseInfoService platBaseInfoService;
//产品服务
@DubboReference(interfaceClass = ProductService.class,version = "1.0")
protected ProductService productService;
//投资服务
@DubboReference(interfaceClass = InvestService.class,version = "1.0")
protected InvestService investService;
//用户服务
@DubboReference(interfaceClass = UserService.class,version = "1.0")
protected UserService userService;
//充值服务
@DubboReference(interfaceClass = RechargeService.class,version = "1.0")
protected RechargeService rechargeService;
}
继承BaseController,再具体写一个controller:
package com.bjpowernode.front.controller;
import com.bjpowernode.api.pojo.BaseInfo;
import com.bjpowernode.front.view.RespResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "平台信息功能")
@RestController
@RequestMapping("/v1")
public class PlatInfoController extends BaseController {
/*平台基本信息*/
@ApiOperation(value = "平台三项基本信息",notes = "注册人数,平均的利率,总投资金额")
@GetMapping("/plat/info")
public RespResult queryPlatBaseInfo(){
//调用远程服务
BaseInfo baseInfo = platBaseInfoService.queryPlatBaseInfo();
RespResult result = new RespResult();
result.setCode(1000); //表示成功
result.setMsg("查询平台信息成功");
result.setData(baseInfo);
return result;
}
}
controller返回前台数据(JSON)工具类-RespResult
package com.bjpowernode.front.view;
import com.bjpowernode.common.enums.RCode;
import com.sun.javaws.jnl.RContentDesc;
import java.sql.ResultSet;
import java.util.List;
/**
* 同一的应答结果。 controller方法的返回值都是它
*/
public class RespResult {
//应答码,自定义的数字
private int code;
//code的文字说明,一般做提示给用户看
private String msg;
//访问token
private String accessToken;
//单个数据
private Object data;
//集合数据
private List list;
//分页
private PageInfo page;
//表示成功的RespResult对象
public static RespResult ok(){
RespResult result = new RespResult();
result.setRCode(RCode.SUCC);
return result;
}
//表示失败的RespResult对象
public static RespResult fail(){
RespResult result = new RespResult();
result.setRCode(RCode.UNKOWN);
return result;
}
public void setRCode(RCode rcode){
this.code = rcode.getCode();
this.msg = rcode.getText();
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public PageInfo getPage() {
return page;
}
public void setPage(PageInfo page) {
this.page = page;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
Swagger配置类:SwaggerConfigruationSettinngs
package com.bjpowernode.front.settings;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Configuration
public class SwaggerConfigruationSettinngs {
//创建Docket对象
@Bean
public Docket docket(){
//1创建Docket对象
Docket docket = new Docket(DocumentationType.SWAGGER_2);
//2创建Api信息, 接口文档的总体描述
ApiInfo apiInfo = new ApiInfoBuilder()
.title("动力节点金融项目")
.version("1.0")
.description("前后端分离的项目,前端Vue,后端Spring Boot + Dubbo分布式项目")
.build();
//3.设置使用ApiInfo
docket = docket.apiInfo(apiInfo);
//4.设置参与文档生成的包
docket = docket.select().apis(RequestHandlerSelectors.
basePackage("com.bjpowernode.front.controller")).build();
return docket;
}
}
@configuration
@configuration注解表示这个类是一个配置类,用于描述如何创建bean。
@bean
@bean注解表示这个方法返回的对象要作为bean注册到Spring容器中,可以通过依赖注入或者Spring应用上下文获取。
添加完Swagger配置后要在启动类上加上@EnableSwaggerBootstrapUI和@EnableSwagger2注解:
package com.bjpowernode.front;
import com.bjpowernode.common.util.JwtUtil;
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
//启动swagger 和 ui
@EnableSwaggerBootstrapUI
@EnableSwagger2
//启动dubbo服务
@EnableDubbo
@SpringBootApplication
public class MicrWebApplication {
@Value("${jwt.secret}")
private String secertKey;
//创建JwtUtil
@Bean
public JwtUtil jwtUtil(){
JwtUtil jwtUtil = new JwtUtil(secertKey);
return jwtUtil;
}
public static void main(String[] args) {
SpringApplication.run(MicrWebApplication.class, args);
}
}
@Resource 和 @Autowired
@Resource 和 @Autowired 都是 Java 中用于依赖注入的注解。
@RequestParam和@param
@RequestParam和@param都是Spring MVC中用来获取请求参数的注解。
@RequestParam用于获取请求参数,可以指定参数名、是否必须、默认值等属性。
@param用于获取请求头、Cookie等参数,可以指定参数名、是否必须、默认值等属性。
两者的区别在于@RequestParam只能获取请求参数,而@param可以获取请求头、Cookie等参数。
public RespResult queryProductByType(@RequestParam("ptype") Integer pType,
@RequestParam(value = "pageNo",required = false,defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize",required = false,defaultValue = "9") Integer pageSize){
RespResult result = RespResult.fail();
if(pType != null && (pType == 0 || pType == 1 || pType == 2)){
pageNo = CommonUtil.defaultPageNo(pageNo);
pageSize = CommonUtil.defaultPageSize(pageSize);
//分页处理,记录总数
Integer recordNums = productService.queryRecordNumsByType(pType);
if( recordNums > 0 ){
//产品集合
List<ProductInfo> productInfos = productService.queryByTypeLimit(pType,pageNo,pageSize);
//构建PageInfo
PageInfo page = new PageInfo(pageNo,pageSize,recordNums);
result = RespResult.ok();
result.setList(productInfos);
result.setPage(page);
}
} else {
//请求参数有误
result.setRCode(RCode.REQUEST_PRODUCT_TYPE_ERR);
}
return result;
}