标签:知识点 小后 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。