Spring [boot] 使用技巧集合-不断积累
来源:互联网 发布:打开文件的软件 编辑:程序博客网 时间:2024/06/05 11:19
1、Spring boot 如何允许跨域访问
测试中遇到的问题,需要前段跨域访问,使用过滤器设置
extends OncePerRequestFilter
@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setHeader("Content-Type", "application/json");response.setHeader("Access-Control-Allow-Origin", "*");//允许所以域名访问,*需要换位制定来源,务必注意这里response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");//允许的访问方式 response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type,auth_token"); response.setHeader("Access-Control-Request-Headers", "x-requested-with,content-type,Accept,自定义header");response.setHeader("Access-Control-Request-Method", "GET,POST,PUT,DELETE,OPTIONS");
filterChain.doFilter(request, response);}
2、Spring boot发布到tomcat
正常打包,war,启动,访问的时候需要项目的名字,需要注意的是,Spring boot 天然不支持tomcat 6了,虽然想点别的办法也可以,但是避免麻烦直接使用tomcat8吧
3、Spring boot 测试启动在项目外围
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
4、spring boot 结合 mybitas后如何打印sql语句
application.yml 文件中配置即可,但是这种模式打印日志会比较多,其实是可以制定打印日志的方法类的, ALT+/会提示,指定到 Mapper类所在包路径即可,#是注释掉
logging: level: #root: DEBUG cn.test.dao: DEBUG
5、spring boot 整合 mock
用于回滚
@Rollback(true)
extends AbstractTransactionalJUnit4SpringContextTests
maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- junit --><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope></dependency>
spring boot 1.4 之前,在测试类上方
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestApplication.class) //使用TestApplication作为spring容器加载类@ActiveProfiles("test") //这边test指配置文件指向spring-test.yml@Rollback(false) //单元测试配置数据库默认会事务会退 此时强制事务提交
spring boot 1.4之后,在测试类上方
@RunWith(SpringRunner.class)@SpringBootTest@WebAppConfiguration @Rollback(false) //单元测试配置数据库默认会事务会退 此时强制事务提交
余下部分-从新包好了1.4后,类上方的配置
@RunWith(SpringRunner.class)@SpringBootTest@WebAppConfiguration @Rollback(false) //单元测试配置数据库默认会事务会退 此时强制事务提交public class NameControllerTest extends AbstractTransactionalJUnit4SpringContextTests{private MockMvc mockMvc;@Autowired protected WebApplicationContext wac;// 该方法在每个方法执行之前都会执行一遍@Beforepublic void setUp() throws Exception {//mockMvc = MockMvcBuilders.standaloneSetup(new NameController()).build();mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象}@Testpublic void testAddDeliverAddress() throws UnsupportedEncodingException, Exception {String responseString = mockMvc.perform(post("/path/") // 请求的url,请求的方法是post.contentType(MediaType.APPLICATION_JSON) // 数据的格式.param("a", "a") // 添加参数.param("phone", "15000000000") // 添加参数).andExpect(status().isOk()) // 返回的状态是200.andDo(print()) // 打印出请求和相应的内容.andReturn().getResponse().getContentAsString(); // 将相应的数据转换为字符串System.out.println("--------返回的json = " + responseString);}}
Spring MVC MOCk:
http://www.cnblogs.com/lyy-2016/p/6122144.html
Maven
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${springframework.version}</version> </dependency>
测试类
package com.bestcxx.stu.springmvc.controller;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mock.web.MockHttpServletResponse;import org.springframework.test.annotation.DirtiesContext;import org.springframework.test.annotation.Rollback;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.web.WebAppConfiguration;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.MockMvcResultHandlers;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;import junit.framework.TestCase;@DirtiesContext@WebAppConfiguration//单元测试的时候真实的开启一个web服务 @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:spring/springmvc-servlet.xml"})//@TransactionConfiguration(transactionManager = "defaultTransactionManager",defaultRollback=false)//事务管理 @Rollback(true)public class HomeControllerTest extends AbstractTransactionalJUnit4SpringContextTests{@Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); //构造MockMvc } @Test public void testShouHomePage() throws Exception{ MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/home")) .andExpect(MockMvcResultMatchers.view().name("home")) .andExpect(MockMvcResultMatchers.status().is(MockHttpServletResponse.SC_OK)) .andDo(MockMvcResultHandlers.print()) .andReturn(); TestCase.assertNotNull(result.getModelAndView().getModel().get("user")); }}
控制台打印结果:
MockHttpServletRequest: HTTP Method = GET Request URI = /home Parameters = {} Headers = {}Handler: Type = com.bestcxx.stu.springmvc.controller.HomeController Method = public java.lang.String com.bestcxx.stu.springmvc.controller.HomeController.shouHomePage(java.util.Map<java.lang.String, java.lang.String>)Async: Async started = false Async result = nullResolved Exception: Type = nullModelAndView: View name = home View = null Model = nullFlashMap: Attributes = nullMockHttpServletResponse: Status = 200 Error message = null Headers = {} Content type = null Body = Forwarded URL = /WEB-INF/views/home.jsp Redirected URL = null Cookies = [] INFO | Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED paused. INFO | Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED shutting down. INFO | Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED paused. INFO | Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED shutdown complete. INFO | {dataSource-1} closed
6、Spring 提供的 url-页面 的现成的方法-无需业务逻辑处理
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/** * 本类用于处理 不处理数据直接通过url 跳转到 页面的方法 * 默认访问 /login 指向 login.html 页面 * @author wj * */@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter{@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/login").setViewName("login");}}
7、Spring validate 检测实体
Maven 依赖
<!-- validation 校验 开始 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.4.1.Final</version></dependency><dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.2.4</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>javax.el</artifactId><version>2.2.4</version></dependency><!-- validation 校验 结束 -->
Controller层
@ResponseBody@RequestMapping(value="/model",method={RequestMethod.GET,RequestMethod.POST})public HashMap<String,Object> model(@Valid @ModelAttribute("usermodel") UserModel usermodel,BindingResult bindingResult){System.out.println("有userName吗:"+usermodel.getUserName());HashMap<String,Object> map=new HashMap<String,Object>();if(bindingResult.hasErrors()){ List<ObjectError> ls=bindingResult.getAllErrors(); for (int i = 0; i < ls.size(); i++) { System.out.println("error:"+ls.get(i)); map.put("result", "WRONG"); map.put("msg",ls.get(i).getDefaultMessage()); return map; } }map.put("result", "OK");return map;}
dto层-UserModel
字符串 @NotBlank 排除空字符串和“”
@NotEmpty 允许空字符串,不允许为“”
整形 @NotNull
public class UserModel implements Serializable{private static final long serialVersionUID = -2443619924488167195L;/**使用 notblank 是不允许空字符串的*/@Size(min=5,message="userName 长度不能小于5")@NotBlank(message="userName 不允许为空,或者空字符串")private String userName;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}}
测试类-mock
package com.bestcxx.stu.springmvc.controller;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.MediaType;import org.springframework.test.annotation.DirtiesContext;import org.springframework.test.annotation.Rollback;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.context.web.WebAppConfiguration;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.MockMvcResultHandlers;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;@DirtiesContext@RunWith(SpringRunner.class) //@RunWith(SpringJUnit4ClassRunner.class) 也是可以的@WebAppConfiguration //单元测试的时候真实的开启一个web服务 @ContextConfiguration(locations={"classpath:spring/springmvc-servlet.xml"}) //@TransactionConfiguration(transactionManager = "defaultTransactionManager",defaultRollback=false)//事务管理 @Rollback(true) public class ParameterControllerTest extends AbstractTransactionalJUnit4SpringContextTests{ @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); //构造MockMvc } @Test public void testModel() throws Exception{ MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/parameterController/model") // 请求的url,请求的方法是post .contentType(MediaType.APPLICATION_JSON) // 数据的格式 .param("name"," " ) // 增加参数 ).andExpect(MockMvcResultMatchers.status().isOk()) // 返回的状态是200 .andDo(MockMvcResultHandlers.print()) // 打印出请求和相应的内容 .andReturn(); // 将相应的数据转换为字符串 System.out.println("--------返回的json = " + mvcResult.getResponse().getContentAsString()); } }
如果是Spring Boot 测试,@SpringBootTest后面也是可以指定文件位置的,也可以默认不指定
@RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration @Rollback(true) //单元测试配置数据库默认会事务会退 此时强制事务提交
8、Spring Boot 在eclipse 开发过程中自动构建
(1)增加maven依赖
<!-- spring-boot热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖本项目的项目如果想要使用devtools,需要重新引入 --> </dependency>
(2)eclipse中开启自动构建功能-会降低开发效率哦
Project-Build Automatically
阅读全文
0 0
- Spring [boot] 使用技巧集合-不断积累
- spring-boot 知识积累
- C#编程小技巧(不断积累中)
- Js编程小技巧(不断积累中)
- QTP 小技巧不断积累更新
- [原创] QTP 小技巧不断积累更新(…
- HTML使用技巧积累
- SlickEdit 使用技巧积累
- Safari使用技巧积累
- SlickEdit 使用技巧积累
- linux使用技巧积累
- JFinal使用技巧积累
- spring中的一些技巧积累
- Spring Boot的资源集合
- Spring Boot 入门问题集合
- js使用的工具方法(不断积累)!!
- Excel使用技巧(不断叠加中。。。)
- Visual SlickEdit 使用技巧积累
- PAT B1037. 在霍格沃茨找零钱
- mybatis学习入门增删改查(一)
- UGUI相册实现
- sharepoint 读取/_layouts/15/目录webconfig配置方法
- JAVA可变形参方法
- Spring [boot] 使用技巧集合-不断积累
- 直方图处理(规定化)
- C#综合揭秘——细说事务
- CW3005|USB智能识别方案|赛微一级代理|中文规格书
- event loop js事件循环 microtask macrotask
- HDU 6033(Add More Zero) 简单数学题 Java
- 2017杭电多校联赛 1001 Add More Zero(取对数)HDU 6033
- 47. Permutations II
- Hadoop和Spark学习日记1