关于Springboot的一些注解的使用小结

本文详细介绍了Spring框架中@ControllerAdvice与@ExceptionHandler的使用,用于全局捕获和处理异常,以及@Profile和@Value注解的应用场景。通过具体代码示例,展示了如何配置异常处理器并实现动态属性注入。

1. @ControllerAdvice可对controller中被 @RequestMapping注解的方法加一些逻辑处理,一般是配合@ExceptionHandler来全局捕获异常。

1) 假设我们有TestController: 

package com.bas.controller;

import com.bas.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class TestController {

    @Autowired
    private TestService testService;

    @RequestMapping(value = "/bas/test", method = RequestMethod.GET)
    public Boolean test(@RequestParam(value="param1",defaultValue = "value1")  String str1,
                              @RequestParam(value="param2",defaultValue = "value2")  String str2) {
        return testService.test(str1, str2);
    }
}

2) 因为错误的类型可以有很多种,这里我们使用Enum来枚举:

package com.bas.collection.common.enums;

public enum ExceptionMessageEnum {

    UNKNOWN_EXCEPTION(500,"未知错误");

    private final Integer code;
    private final String message;

    ExceptionMessageEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

3) 然后是一个异常处理器:

package com.bas.exception;

import com.bas.common.enums.ExceptionMessageEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@ControllerAdvice
public class GlobalExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public String exceptionHandler(HttpServletRequest request, Exception e) {
        logger.info("\nurl:[{}],\n", request.getRequestURL());
        logger.error("an exception occurs ", e);
        return ExceptionMessageEnum.UNKNOWN_EXCEPTION.getMessage();
    }
}

更详细的例子也可以参考Spring的@ExceptionHandler和@ControllerAdvice统一处理异常

2. @Profile

比如我这篇文章结合使用Springboot JMS 与 Amazon SQS 标准队列 写的JmsConfiguration。当我们启动项目的时候,这个JMS会自动启动监听器了,而这个JMS又依赖服务器上的特有权限 比如访问资源,那么当我们本地没有权限时执行unit-test的话就不能正常启动了。这个时候加上注解@Profile({"stg", "dev", "prod"}) 就可以很好地解决问题了,如图:

3. @Value

假设我们项目的properties里面配置的属性的值是以 , 分割。properties如下:

bas.tables=table1,table2,table3

 可以像下面这样注入:

@Value("#{'${bas.tables}'.split(',')}")
private List<String> tableNameList;

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值