ylb_学习笔记

@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的资源
参数:

  • tags:说明该类的作用,参数是个数组,可以填多个
  • value:该参数没什么意义,在UI界面上不显示,所以不用配置
  • description:用户基本信息描述

@ApiOperation()
用于方法,表示一个http请求访问该方法的操作
参数:

  • value:方法的用途和作用
  • notes:方法的注意事项和备注
  • httpMethod:请求方式

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 中用于依赖注入的注解。

  • @Resource 是 Java EE 5 中引入的注解,可以注入任何一个由 Java EE 管理的对象,比如说 EJB 组件或者 JPA 实体管理器等等。它可以指定注入的对象名称,如果不指定名称,就会根据类型匹配来自动注入。
  • @Autowired 是 Spring 框架中引入的注解,可以实现自动化装配。和 @Resource 不同的是,它只能匹配类型来自动注入,不能指定名称。但是,它具有更强大的功能,比如说支持按名称、类型和 Qualifier 进行匹配等等,因此在 Spring 框架中使用更加广泛。

@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;

    }

你可能感兴趣的:(学习,笔记,java)