首页 > 其他分享 >项目准备

项目准备

时间:2023-08-03 16:02:51浏览次数:31  
标签:String 项目 id json student 准备 public name

1. fastjson介绍   2

java处理json的库 : fastjson , jackson , gson

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 fastjson是json的序列化和反序列化

fastjson已经被广泛使用在各种场景,包括cache存储、RPC通讯、MQ通讯、网络协议通讯、Android客户端、Ajax服务器处理程序等等。

fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

在一个空工程中新建一个maven模块

项目准备_swagger

项目准备_json_02

maven依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>

1.1 简单例子  2-3

依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode</groupId>
    <artifactId>ready-01-fastjson</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
<!--        单元测试  2-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>


</project>

创建对象Student

package com.bjpowernode.model;

//实体类  2
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    //对象类型
    private School school;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public School getSchool() {
        return school;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

测试方法MyTest

//将一个student对象转为json   2
    @Test
    public void testToJson(){
        Student student = new Student();
        student.setId(2001);
        student.setName("李四");
        student.setAge(20);
        //student-json, 使用fastjson -- JSONObject 提供了静态方法
        String json = JSONObject.toJSONString(student);

        //{"age":20,"id":2001,"name":"李四"}
        System.out.println("student转为json="+json);
    }

项目准备_maven_03

//json->student对象   2
    @Test
    public void testToObject(){
        String json="{\"age\":30,\"id\":5671,\"name\":\"周畅\"}";
        //转为对象
        Student student = JSONObject.parseObject(json, Student.class);
        //Student{id=5671, name='周畅', age=30}
        System.out.println("student="+student);

        System.out.println("name="+student.getName());
    }

项目准备_swagger_04

//获取 name key 的值   3
    @Test
    public void testAccessValue(){
        String json="{\"age\":30,\"id\":5671,\"name\":\"周畅\"}";
        JSONObject jsonObject = JSONObject.parseObject(json);
        //JSONObject是一个map
        String name = jsonObject.getString("name");
        System.out.println("name="+name);

        int age  = jsonObject.getIntValue("age");
        System.out.println("age = " + age);
    }

项目准备_fastjson_05

1.2 解析json    4

在创建一个实体类

实体类School

package com.bjpowernode.model;

//实体类   4
public class School {

    private String name;
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

测试类TestJSON   4

@Test
    public void test01(){
        Student student = new Student();
        student.setId(1001);
        student.setName("李四");
        student.setAge(20);

        School school = new School();
        school.setName("北京大学");
        school.setAddress("北京的海淀区");
        student.setSchool(school);//将学校设置进学生的属性  4

        //student - json
        String json = JSONObject.toJSONString(student);
        //{"age":20,"id":1001,"name":"李四","school":{"address":"北京的海淀区","name":"北京大学"}}
        System.out.println("json = " + json);


    }

项目准备_httpClient_06

//json->student   4
    @Test
    public void test02(){
        String json="{\"age\":22,\"id\":2001,\"name\":\"李四\",\"school\":{\"address\":\"北京的海淀区\",\"name\":\"北京大学\"}}";
        //转为Student
        Student student = JSONObject.parseObject(json, Student.class);
        System.out.println("student="+student.toString());
    }

项目准备_fastjson_07

//拿到地址  4
    @Test
    public void testRead(){
        String json="{\"age\":22,\"id\":2001,\"name\":\"李四\",\"school\":{\"address\":\"北京的海淀区\",\"name\":\"北京大学\"}}";

        JSONObject jsonObject = JSONObject.parseObject(json);

       /* JSONObject schoolObject = jsonObject.getJSONObject("school");
        String address = schoolObject.getString("address");
        System.out.println("address = " + address);*/

        //将上述代码合起来  4
        String string = JSONObject.parseObject(json).getJSONObject("school").getString("address");
        System.out.println("string = " + string);

    }

项目准备_json_08

2. HttpClient是什么   5

HttpClient是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包。 

HttpClient 是一个HTTP通信库、一个工具包,它只提供一个通用浏览器应用程序所期望的功能子集,与浏览器相比是没有界面的。

把HttpClient 看做是 ajax 中的 XMLHttpRequest对象

2.1 HttpClient能做什么  

HttpClient的功能包括但不限于:

模拟浏览器发送HTTP请求,发送请求参数,并接收响应。

RPC接口调用

爬取网页源码

2.2 HttpClient优点    5

基于标准、纯净的java语言。实现了HTTP1.0和HTTP1.1;

以可扩展的面向对象的结构实现了HTTP全部的方法(GET, POST等7种方法);

支持HTTPS协议;

通过HTTP代理建立透明的连接

2.3 怎么用   6

创建一个新模块

项目准备_fastjson_09

文档: http://hc.apache.org/httpcomponents-client-5.0.x/

代码在ready-02-httpclient

1)pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode</groupId>
    <artifactId>ready-02-httpclient</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

2.4 get请求    6

TestClient

//向url发起get请求   6
    @Test
    public void testGet(){
        //发起get请求,编程方式处理http请求。
        String url="https://restapi.amap.com/v3/ip?key=0113a13c88697dcea6a445584d535837&ip=60.25.188.64";
        //1.创建HttpClient对象
        CloseableHttpClient client = HttpClients.createDefault();
        //2.创建HttpGet对象
        HttpGet httpGet = new HttpGet(url);
        //3.执行请求,使用client对象的方法,执行请求后获取返回结果
        //CloseableHttpResponse是返回结果,相当于HttpServletResponse
        try{
            CloseableHttpResponse response = client.execute(httpGet);
            //从response获取应答信息
            //getStatusCode获取状态码  HttpStatus.SC_OK  200 状态码的常量
            if( response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                //4.获取数据
                //response.getEntity().getContent();//数据
                String json = EntityUtils.toString(response.getEntity());
                System.out.println("访问ip的应答结果:"+json);
            }

        }catch (Exception e){
            e.printStackTrace();
        } finally {
            //5.关闭资源
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

项目准备_json_10

2.5 Post请求   7-8

//post请求  7
    @Test
    public void testHttpPost(){
        //1.创建HttpClient对象
        CloseableHttpClient client = HttpClients.createDefault();

        //2.创建HttpPost对象,表示post请求
        String url = "https://restapi.amap.com/v3/ip";
        HttpPost httpPost = new HttpPost(url);

        //3.准备post请求的参数
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        //添加参数   BasicNameValuePair类,实现了NameValuePair接口
        //          BasicNameValuePair(参数名,参数值);
        params.add( new BasicNameValuePair("key","0113a13c88697dcea6a445584d535837"));
        //params.add( new BasicNameValuePair("ip","60.25.188.64"));
        params.add( new BasicNameValuePair("ip","111.201.50.56"));

        //4.设置HttpPost使用参数
        try{
            httpPost.setEntity( new UrlEncodedFormEntity(params));
            //5.执行请求
            CloseableHttpResponse res = client.execute(httpPost);
            //6.读取数据
            if( res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                String json = EntityUtils.toString(res.getEntity());
                System.out.println("json="+json);
            }

        } catch (Exception e){
            e.printStackTrace();
        } finally {
            //关闭资源
            try{
                client.close();
            }catch (Exception ex){
                ex.printStackTrace();
            }
        }

    }

项目准备_httpClient_11

3. Swagger是做什么的   9

代码在ready-03-swagger

创建一个新模块,本来要创建一个springboot项目的,我们直接手动添加springboot的依赖即可

项目准备_maven_12

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。

Swagger能够在线自动生成 RESTFul接口的文档,同时具备测试接口的功能。

简单点来讲就是说,swagger是一款可以根据RESTFul风格生成的生成的接口开发文档,并且支持做测试的一款中间软件。不是RESTFul风格也能生成文档。

特点是在线的,及时的,最新的。

3.1  Swagger优点和作用

•  服务器端只需要定义好接口,会自动生成文档,接口功能、参数一目了然

•  联调方便,如果出问题,直接测试接口,实时检查参数和返回值,就可以快速定位是前端还是后端的问题

•  对于某些没有前端界面UI的功能,可以用它来测试接口

•  操作简单,不用了解具体代码就可以操作

3.2  Swagger动态生成API

首先通过SpringBoot创建Web项目。选择web依赖。

maven的pom.xm.加入swagger依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.bjpowernode</groupId>
    <artifactId>ready-03-swagger</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <!--Swagger依赖  9-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

controller

MyController

package com.bjpowernode.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

//演示swagger的使用  9
@RestController
public class MyController {
    @GetMapping("/hello")
    public String helloSwagger(String name,Integer id){
        return "Swagger在线生成接口文档,同时具有测试接口的功能";
    }
}

application.properties

server.port=8000
server.servlet.context-path=/myweb

最后在启动上加入@EnableSwagger2

package com.bjpowernode;

//启动类  9

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableSwagger2 //表示启用swagger  10
@SpringBootApplication
public class SwaggerApp {
    public static void main(String[] args) {
        SpringApplication.run(SwaggerApp.class,args);
    }
}

启动报错,是因为swagger跟springboot新版版本有关,需要改一些配置

项目准备_fastjson_13

3.2.1 修改配置   10

如果使用SpringBoot 2.6以上版本,需要在application.properties加入

#解决springboot2.6.2使用swagger的问题

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

项目准备_maven_14

server.port=8000
server.servlet.context-path=/myweb

#路径匹配规则  10
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

浏览器访问:http://localhost:8000/myweb/swagger-ui.html

项目准备_swagger_15

测试

项目准备_json_16

项目准备_swagger_17

3.3 自定义文档  11

3.3.1 设置文档的头

package com.bjpowernode.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

//配置接口文档 的头 11
@Configuration
public class SwaggerConfigruationSettings {
    //创建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分布式项目")//描述
                .contact(new Contact("bj2114","http://www.bjpowernode.com","bj@bjpowernode"))//联系人
                .license("2.0")//协议
                .build();
        
        //3.设置使用ApiInfo
        docket  = docket.apiInfo(apiInfo);
        
        return docket;
    }
}

项目准备_httpClient_18

3.3.2 设置哪些controller参与生成  12

项目准备_maven_19

//4. 设置哪些controller参与生成  12
        docket = docket.select().apis(RequestHandlerSelectors.basePackage("com.bjpowernode.controller")).build();

项目准备_fastjson_20

3.3.3 换一个ui

<!--换一个swagger ui  12-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

在启动类添加注解

项目准备_maven_21

浏览器输入http://localhost:8000/myweb/doc.html

项目准备_swagger_22

3.3 Swagger中注解列表:   13

3.3.1 @Api   13

用在类上,说明该类的作用。可以标记一个 Controller 类作为 Swagger 文档资源

例如:

    @Api(tags={"用户接口"})

    @RestController

    public class UserController {

}

项目准备_maven_23

项目准备_maven_24

3.3.2 @ApiModel    14

用在类上,表示对类进行说明,用于实体类中的参数接收说明。

@ApiModel(value = "com.bjpowernode.AddUserParam", 

description = "新增用户参数")

public class AddUserParam {

}

项目准备_maven_25

项目准备_httpClient_26

3.3.3 @ApiModelProperty  14

用于字段,表示对 model 属性的说明

    @ApiModel(value = "com.bjpowernode.AddUserParam", 

description = "新增用户参数")

    public class AddUserParam {

        @ApiModelProperty(value = "ID")

        private String id;

        @ApiModelProperty(value = "名称")

        private String name;

        @ApiModelProperty(value = "年龄")

        private int age;

    }

项目准备_swagger_27

项目准备_httpClient_28

3.3.4 @ApiOperation   13

用在 Controller 里的方法上,说明方法的作用,每一个接口的定义

@ApiOperation(value="新增用户", notes="详细描述")

public UserDto addUser( AddUserParam param) {

}

项目准备_json_29

项目准备_fastjson_30

3.3.5 @ApiImplicitParam 和 @ApiImplicitParams   13

用于方法上,为单独的请求参数进行说明

    @ApiImplicitParams({

            @ApiImplicitParam(name = "id", value = "用户ID", dataType = "string", paramType = "query", required = true, defaultValue = "1") })


    @GetMapping("/user")

    public UserDto getUser(@RequestParam("id") String id) {

        return new UserDto();

    }

• name:参数名,对应方法中单独的参数名称。

• value:参数中文说明。

• required:是否必填。

• paramType:参数类型,取值为 path、query、body、header、form。

• dataType:参数数据类型。

• defaultValue:默认值。

项目准备_fastjson_31

项目准备_json_32

3.3.6 @ApiResponse 和 @ApiResponses   14

用于方法上,说明接口响应的一些信息;@ApiResponses 组装了一个或多个 @ApiResponse

    @ApiResponses({ @ApiResponse(code = 200, message = "OK", response = UserDto.class) })

    @PostMapping("/user")

    public UserDto addUser(AddUserParam   param) {

}

新建一个实体类

package com.bjpowernode.model;

public class Student {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
@ApiOperation(value = "查询学生",notes = "根据主键查询学生信息")
    @ApiImplicitParams({ //说明参数  14
            @ApiImplicitParam(name = "id",value = "主键")
    })
    @ApiResponses({//描述返回结果   14
            @ApiResponse(code=200,message = "接口访问成功", response =Student.class ),
            @ApiResponse(code=404,message = "接口没找到" )
    })
    @PostMapping("/query/id")
    public Student queryStudent(String name, Integer id){
        Student student = new Student();
        student.setId(1001);
        student.setName("李四");
        return student;
    }

项目准备_httpClient_33

标签:String,项目,id,json,student,准备,public,name
From: https://blog.51cto.com/u_15784725/6950020

相关文章

  • 牛客网项目开发学习
    牛客网项目SpringSpringIocInversionofControl控制反转,是一种面向对象编程的设计思想。DependencyInjection依赖注入,是IOC思想的实现方式。IocContainerIoc容器,是实现依赖注入的关键,本质上是一个工厂。SpringMVC三层架构:表现层,业务层,数据访问层。MVC:Model模型......
  • Eclipse 创建OSGI项目并调试
    File->new->Plug-inProject......
  • vue2项目中引入svg图标
    vue版本  vue:"^2.6.11"1.下载对应的svg依赖npminstallsvg-sprite-loader--save-dev2.创建svgIcon文件夹文件夹下对应3个文件svg文件夹:存放svg文件index.js文件:vue挂载svgindex.vue文件:封装的svg文件 3.index.js文件全局挂载到vue上1importVue......
  • 免费的敏捷项目管理,scrum开发软件
    ​Scrum中非常强调公开、透明、直接有效的沟通,这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求,故事,任务之间的流转状态,可以使团队成员更加快速适应敏捷开发流程。Leangoo领歌Leangoo领歌是一款永久免费的专业敏捷......
  • docker部署项目,涉及springboot\tomacat\nginx\es
    sudoapt-getinstalldocker-ce=5:20.10.6~3-0~debian-bullseyedocker-ce-cli=5:20.10.6~3-0~debian-bullseyecontainerd.iodocker部署项目信息:--172.17.0.1   172.16.22.401、docker部署tomcatdockerrun-d --namestock-admin--restartalways-p81:8080-e"TZ......
  • 老杜 JavaWeb 讲解(十八) ——项目优化(Servlet+JSP+EL+JSTL)
    (十六)项目优化(Servlet+JSP+EL+JSTL)相关视频:55-EL表达式JSTL和base标签改造OA新旧代码对比:注意点:Java代码不需要改动,只需要更改jsp代码。将需要的包导入:jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jarmysql-connector-j-8.0.31.j......
  • kratos项目中使用kafka实现延迟队列
    项目地址https://gitee.com/huoyingwhw/kratos_kafkaB站视频地址B站视频地址——kratos项目中使用kafka实现延迟队列......
  • 我用 GPT-4 生成了性能全网第一的 Golang Worker Pool,轻松打败 GitHub 万星项目
    目录1.我写了一个超牛的开源项目1.1你看看这性能1.2你看看这功能1.3你猜我这一百天都经历了啥2.你有多久没写并发程序了?3.问:一个WorkerPool程序需要包含哪些功能?4.让GPT-4写第一行代码!4.1我对GPT-4说4.2GPT-4回答4.3我又对GPT-4说4.4GPT-4......
  • 运维——springboot项目部署
    转自:https://juejin.cn/post/6844903877150507016#heading-20摘要本文主要以图文的形式讲解mall在Linux环境下的部署,涉及在Docker容器中安装Mysql、Redis、Nginx、RabbitMQ、Elasticsearch、Mongodb,以及SpringBoot应用部署,基于CenterOS7.6。Docker环境安装安装yum-utils:......
  • Docker部署项目实践
    上一篇文件介绍了《Docker基础》,介绍类介绍如何使用docker发布java项目。一、项目打包首先,Docker部署项目前,先将项目打包好,比如达成jar文件,最好直接测试jar是否可运行,这里指定了端口1java-jaryour-app.jar--server.port=8081然后,将打包好的文件放到服务器指定位置 ......