ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

开发小后端项目的基础知识点

2022-05-06 23:04:24  阅读:121  来源: 互联网

标签:知识点 小后 private 开发 static import com public resources


  学习过一个项目,记录一些基本知识点。

  程序仓库:https://gitee.com/juncaoit/xiaod

 

1.springboot 的官网

  https://spring.io/projects/spring-boot#overview

 

2.@Controller与@RestController的区别

@Controller 作⽤:⽤于标记这个类是⼀个控制器,返回⻚⾯的时候使⽤;如果要返回JSON,则需要在接⼝上使⽤@ResponseBody才可以
@RestController 作⽤:⽤于标记这个类是⼀个控制器,返回JSON数据的时候使⽤,如果使⽤这个注解,则接⼝返回数据会被序列化为JSON 所以:@RestController = @Controller+@ResponseBody

 

3.springboot的目录结构

  

 

 

 

src/main/java:存放代码
src/main/resources
static: 存放静态⽂件,⽐如 css、js、image, (访问⽅式 http://localhost:8080/js/main.js)
templates:存放静态⻚⾯jsp,html,tpl
config:存放配置⽂件,application.properties
resources:

 

4.同个⽂件的加载顺序

  静态资源⽂件 Spring Boot 默认会挨个从:

  META/resources > resources > static > public ⾥⾯找是否存在相应的资源

  默认配置 spring.resources.static-locations = classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

 

  如何添加新的目录,则修改appliction.properties

#文件加载内容
spring.resources.static-locations=classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/, classpath:/templates/

 

  启动之后进行访问页面:

http://localhost:8080/success.html

  

 

 

 

 

5.解压后的jar包的目录

  org:spring使用的

  META-INF:指定main函数的位置,告诉虚拟机入口位置

  BOOT-INF:自己的项目下的class与lib

  

 

 

 

6.对外接口使用统一的json格式

  对外转换:

package com.jun.xiaod.utils;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class JsonData<T> {

    private int code;

    private T data;

    private String msg;

    public JsonData(int code, T data) {
        this.code = code;
        this.data = data;
    }

    public static <T> JsonData<T> buildSuccess(T data) {
        return new JsonData<T>(0, data, "");
    }

    public static <T> JsonData<T> buildFail(String msg) {
        return new JsonData<T>(-1, null, msg);
    }

    public static <T> JsonData<T> buildFail(int code, String msg) {
        return new JsonData<T>(code, null, msg);
    }
}

  

  同时,序列化与反序列化工具:

package com.jun.xiaod.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;


public class JsonUtils {
/**
* 序列化
*/
public static <T> String toJsonString(T t) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(t);
}

/**
* 反序列化
*/
public static <T> T read(String jsonStr) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(jsonStr, new TypeReference<T>(){});
}
}

 

7.JackSon处理字段

  在返回的VO中添加注解:

jackson处理相关⾃动:
指定字段不返回:@JsonIgnore 指定⽇期格式:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8") 空字段不返回:@JsonInclude(Include.NON_NULL) 指定别名:@JsonProperty

 

  举例:

package com.jun.xiaod.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Video {
    private int id;

    /**
     * 视频标题
     */
    private String title;

    /**
     * 概述
     */
    private String summary;

    /**
     * 封面图
     */
    private String coverImg;

    /**
     * 价格,分
     */
    private int price;

    /**
     * 创建时间
     */
    @JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8")
    @JsonProperty("create_time")
    private Date createTime;

    /**
     * 默认8.7,最高10分
     */
    private Double point;

}

  

  效果:

  其中,video.setCreateTime(new Date());

{
    "code": 0,
    "data": [
        {
            "id": 1,
            "title": "java",
            "summary": null,
            "coverImg": null,
            "price": 0,
            "point": null,
            "create_time": "2022-05-06 09:57:54"
        }
    ],
    "msg": ""
}

 

8.添加配置文件

  

 

  其中,配置文件如下:

#微信支付配置
wxpay.appid=w123456
wxpay.secret=safemn
wx.mechid=121212

 

  其他地方引用使用:

    @Resource
    private WxConfig wxConfig;

 

9.单元测试

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

 

  使用:

  在controller的测试类中进行继承。

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {VideoApplication.class})
public class BaseTest {
}

 

10.MockMvc

  增加类注解 @AutoConfigureMockMvc

  注⼊⼀个MockMvc类

  相关API :

    perform执⾏⼀个RequestBuilder请求

    andExpect:添加ResultMatcher->MockMvcResultMatchers验证规则

    andReturn:最后返回相应的MvcResult->Response

package com.jun.xioad.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.jun.xiaod.controller.VideoController;
import com.jun.xiaod.domain.Video;
import com.jun.xiaod.utils.JsonData;
import com.jun.xiaod.utils.JsonUtils;
import com.jun.xioad.BaseTest;
import junit.framework.TestCase;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import javax.annotation.Resource;
import java.sql.*;
import java.util.List;

@Slf4j
@AutoConfigureMockMvc
public class VideoControllerTest extends BaseTest {
    @Resource
    private VideoController videoController;
    @Resource
    private MockMvc mockMvc;

    @Test
    public void testList() throws JsonProcessingException {
        JsonData<List<Video>> videoList = videoController.getVideoList();
        log.info("videoList=={}", JsonUtils.toJsonString(videoList));
        TestCase.assertEquals(5, videoList.getData().size());
        TestCase.assertTrue(videoList.getData().size() > 0);
    }

    /**
     * mockMvc的使用
     */
    @Test
    public void testListMvc() throws Exception {
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/app/v1/test/get/config"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn();
        int status = mvcResult.getResponse().getStatus();
        log.info("ststua={}", status);
    }


}

 

11.全局异常处理

 

标签:知识点,小后,private,开发,static,import,com,public,resources
来源: https://www.cnblogs.com/juncaoit/p/16235446.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有