1、json输出
只需要类添加 @RestController
即可,默认类中的方法都会以json的格式返回
@RestController public class HelloWorldController { @RequestMapping("/getUser") public User getUser() { User user=new User(); user.setUserName("傻宝"); user.setPassWord("xxxx"); return user; } }
2、自定义Filters
我们常常在项目中会使用filters用于录调用日志、排除有XSS威胁的字符、执行权限验证等等。
springboot添加过滤器主要有两种方式:
1、通过扫面注解的方式添加过滤器
第一步:
package com.pangjh.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* 创建过滤器AnnotationFilter,实现Filter接口,并在类上添加@WebFilter注解
* @author pangjianhui
*
*/
@WebFilter(urlPatterns="/hello",filterName="annotationFilter")
public class AnnotationFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("注解方式添加过滤器 init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("注解方式添加过滤器 doFilter");
}
@Override
public void destroy() {
System.out.println("注解方式添加过滤器 destroy");
}
}
第二步:
在springboot的启动类上添加@ServletComponentScan注解
package com.pangjh;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan
public class SpringbootFoundApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootFoundApplication.class, args);
}
}
以上就能完成通过注解的方式自定义Filter
2.通过代码注册的方式添加过滤器
主要有两个步骤:
- 创建MyFilter,实现Filter接口
- 添加@Configurationz 注解,将自定义Filter加入过滤链
代码如下:
package com.pangjh.filter;
import org.apache.catalina.filters.RemoteIpFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.pangjh.filter.WebConfiguration.MyFilter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
@Configuration
public class WebConfiguration {
/**
* 现在假设我们的应用程序运行在一台负载均衡代理服务器后方,
* 因此需要将代理服务器发来的请求包含的IP地址转换成真正的用户IP。
* Tomcat 8 提供了对应的过滤器:RemoteIpFilter。
* @return
*/
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
@Bean
public FilterRegistrationBean<MyFilter> testFilterRegistration() {
FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("MyFilter");
registration.setOrder(1);
return registration;
}
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest rq = (HttpServletRequest)request;
System.out.println("请求地址是:"+rq.getLocalAddr());
chain.doFilter(rq, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
}
3、自定义property
在web开发的过程中,我经常需要自定义一些配置文件,如何使用呢
方法一:配置在application.properties中
com.pangjh.enemy=傻宝
com.pangjh.teacher=香菇
自定义配置类MeProperty,添加注解@Component。
定义属性,配对配置文件上面的信息,添加@Value注解,通过${com.pangjh.teacher}方式把配置文件上的信息注入到属性中
package com.pangjh.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MeProperty {
@Value("${com.pangjh.teacher}")
private String teacher;
@Value("${com.pangjh.enemy}")
private String enemy;
public MeProperty() {
super();
}
public MeProperty(String teacher, String enemy) {
super();
this.teacher = teacher;
this.enemy = enemy;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public String getEnemy() {
return enemy;
}
public void setEnemy(String enemy) {
this.enemy = enemy;
}
}
使用场景:通过@Autowired注解获取
package com.pangjh.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.pangjh.config.MeProperty;
@RestController
public class PangjhController {
@Autowired
private MeProperty meProperty;
@RequestMapping("/hello")
public String getMessge(){
System.out.println("香菇,我拿到配置文件的内容啦:"+meProperty.getTeacher());
return "what do you want";
}
}
方法二:获取自定义配置文件中的配置
在pom文件中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
在项目src/main/resources目录下添加配置文件xianggu.properties
内容如下:
xianggu.sex=man
xianggu.money=100000000
添加配置文件的管理类MeXiangguConfig:
package com.pangjh.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "xianggu")
@PropertySource("classpath:xianggu.properties")
@Component
public class MeXiangguConfig {
private String sex;
private String money;
public MeXiangguConfig() {
super();
}
public MeXiangguConfig(String sex, String money) {
super();
this.sex = sex;
this.money = money;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
}
使用方法,使用@Autowired注入MeXiangguConfig对象获取配置文件的值:
package com.pangjh.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.pangjh.config.MeXiangguConfig;
@RestController
public class PangjhController {
@Autowired
private MeXiangguConfig meXiangguConfig;
@RequestMapping("/hello")
public String getMessge(){
System.out.println("香菇,我知道你的账户余额啦,是:"+meXiangguConfig.getMoney()+"元");
return "what do you want";
}
}
在浏览器中输入:http://localhost:8080/hello
就能看到控制台的打印结果:
4、log配置
配置输出的地址和输出级别
logging.path=log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR
logging.path配置的路径会在项目中生成log文件夹,项目的日志会生成在log文件夹里面
path为本机的log地址,logging.level
后面可以根据包路径配置不同资源的log级别