使用在controller层的方法中,作用:在controller中使用@RequestMapping修饰的每个方法的使用前执行。
https://blog.csdn.net/li_xiao_ming/article/details/8349115
@Resource: jdk提供的自动注入,使用ByName注入
@Autowired:spring提供的自动注入,使用ByType注入
@Qualifier:在使用Autowired注入的同时,Qualifier提供了ByName注入方式。
@Service("downloadPersonInfoFileService")
public class DownloadPersonInfoExcelFileServiceImpl implements IDownloadFileService
{
public boolean downloadExcelFile()
{
System.out.println("PersonInfoFile");
return false;
}
}
@Service("downloadEnterpriseInfoFileService")
public class DownloadEnterpriseInfoExcelFileServiceImpl implements IDownloadFileService
{
public boolean downloadExcelFile()
{
System.out.println("EnterpriseInfoFile");
return false;
}
}
@Controller
public class DownloadFileController
{
@Autowired
@Qualifier("downloadPersonInfoFileService")
private IDownloadFileService downloadPersonInfoFileService;
@Autowired
@Qualifier("downloadEnterpriseInfoFileService")
private IDownloadFileService downloadEnterpriseInfoFileService;
@RequestMapping(value="/downloadPersonInfo", method = {RequestMethod.GET})
@ResponseBody
public String doanloadPersonInfoExcelFile()
{
downloadPersonInfoFileService.downloadExcelFile();
return "PernsonInfoFile";
}
@RequestMapping(value="/downloadEnterpriseInfo", method = RequestMethod.GET)
@ResponseBody
public String doanloadEnterpriseInfoExcelFile()
{
downloadEnterpriseInfoFileService.downloadExcelFile();
return "EnterpriseInfoFile";
}
}
使用在方法上。作用:用该注解修饰的方法,表示在类初始化时,进行执行。
注意:construction > @Autowired > @PostConstruct
1.使用在配置类上,2.在配置类上使用@EnableScheduling表示开启任务,3.在对应的方法上使用@Scheduled表示执行的方法。
Scheduled注解的参数:
1.corn 2.zone 3.fixedDelay和fixedDelaystring 4.fixedRate和fixedRateString 5. initialDelay和initialDelayString
1.cron是设置定时执行的表达式,如 0 0/5 * * * ?每隔五分钟执行一次 cron([Seconds] [Minutes] [Hours] [Day of month] [Month] [Day of week] [Year] )
2.zone表示执行时间的时区
3.fixedDelay和fixedDelaystring表示一个固定延迟时间再执行,表示上个任务完成后,延迟多长时间执行
4.fixedRate和fixedRateString 固定频率执行。单位毫秒;fixedRate = 1000 (每隔一秒执行)
5.initialDelay 表示将第一次计划推迟多久后进行执行,需要和fixedRate进行配合,@Scheduled(fixedRate =1000, initialDelay=10000)
详细查看: https://www.javacodegeeks.com/2018/02/running-time-springs-scheduled-tasks.html
1.对于GET/POST提交时,
支持application/x-www-form-urlencoded,可选(也可以用@requestParam,@ModelAttribute)
multipart/form-data,不能处理。
其他格式,必须使用(例如application/json、application/xml等,只能用@RequestBody接受)
2. 对于PUT提交。
multipart/form-data, 不能处理
其他格式,必须使用。
@JsonFormat (timezone = "GMT+8",pattern = "yyyy-MM-dd") 在实体上使用时间格式
@JsonInclude (JsonInclude.include.NON_NULL) 忽略null属性
Transient 表示 不进行序列化 。JsonIgnore表示在将Javabean转化为json时,取消对应的字段。
当一个接口有多个实现类,spring 在使用接口注入时,就会报错,找不到注入类。因此用@primary告诉spring 是注入的哪个类。
@Component
public class MetalSinger implements Singer{
@Override
public String sing(String lyrics) {
return "I am singing with DIO voice: "+lyrics;
}
}
@Component
public class OperaSinger implements Singer {
@Override
public String sing(String lyrics) {
return "I am singing in Bocelli voice: "+lyrics;
}
}
@Component
public class SingerService {
private static final Logger logger = LoggerFactory.getLogger(SingerService.class);
@Autowired
private Singer singer;
public String sing(){
return singer.sing("song lyrics");
}
}
如上代码就会报错,spring找不到注入的类。就需要在 private Singer singer;上加入@Primary,告诉spring 应该用哪个注入。
其实还有一个方法。
通知编译器忽略指定警告。
@RequestMapping(value = "helloword", consumes = "application/json", produces = "application/xml")
在request header中有contentType 和 accept属性,contentType表示客户端发送给服务端的格式,accept表示客户端接受服务端的格式。与之对应的服务器端的就是用consumes和produces。consumes对应contentType,produces对应accept。
@RestControllerAdvice是@ResponseBody和@Component组成。仅仅用作增强。
需求:需要给每一个请求,在返回时,修改responseBody的值。
不可以在拦截器的postHandler方法中修改的原因:当controller中返回json时,响应会先于postHandler方法,传入到handlerAdapter中。
public class MyResponseBody implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter methodParameter, Class aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
return o;
}
}
其中,supports方法返回ture,表示当controller执行后,会调用beforeBodyWrite方法。对responseBody进行设置。