SpringBoot的@Value注解如何设置默认值

 更新时间:2023年02月13日 10:20:54   作者:程序新视界  
这篇文章主要介绍了SpringBoot的@Value注解如何设置默认值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@Value注解设置默认值

在Spring Boot中,如果使用@Value注解对属性进行赋值,但如果在配置文件或启动参数中未指定对应的参数值,则会抛出异常。异常信息往往是对应注入属性的类实例化失败。

此时,需要对@Value对应的值进行配置,或设置默认值。

设置方法如下:

@RestController
public class ConfigController {
    // ①未指定默认值
    @Value("${user.username}")
    private String username;
    
    // ②指定默认值为“unknown”
    @Value("${projectName:unknown}")
    private String projectName;
}

针对以上两个@Value的使用,如果username对应的属性值未在application.properties文件中配置或未在java -jar命令中传递参数,那么启动时将抛出异常。

而针对第二种方式,通过“:”指定如果获取不到该参数值时所使用的默认值,则启动时不会出现异常信息。

@Value注解默认值使用及效果测试

使用@Value注解的代码

注意事项:

(1)注解修饰的变量不能是final、static。

(2)使用@Component修饰所在类交给spring管理。

(3)使用时要用@Autowried注入,不能new对象。

(4)${address-config:浙江省杭州市西湖区} address-config为配置文件属性名,如果配置文件没有配则使用默认值,当前默认值为‘浙江省杭州市西湖区’。

注意使用的是${} 而不是 #{}

User.java

package com.oashiro.example.test;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class User{
    public String address;

    @Value("${address-config:浙江省杭州市西湖区}")
    public void steAddress(String address){
        this.address=address;
    }

    public String getAddress(){
        return this.address;
    }

    @Override
    public String toString() {
        return "User{" +
                "address='" + address + '\'' +
                '}';
    }
}

Junit测试

UserTest.java

package com.oashiro.example.test;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class UserTest {

    @Autowired
    private User user;

    @BeforeEach
    public void setup(){
        System.out.println("开始测试1");
    }
    
	@AfterEach
    public void teardown(){
        System.out.println("测试结束1");
    }

    @Test
    public void printUser(){
        System.out.println(user);
        //预期结果(浙江省)与实际获取的默认结果(浙江省杭州市西湖区)作对比
        assertEquals("浙江省",user.getAddress());
    }
}

测试结果

在这里插入图片描述

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解析springboot包装controller返回值问题

    解析springboot包装controller返回值问题

    这篇文章主要介绍了springboot包装controller返回值问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 简单了解Java编程中抛出异常的方法

    简单了解Java编程中抛出异常的方法

    这篇文章主要介绍了Java编程中抛出异常的方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • Java轻松使用工具类实现获取MP3音频时长

    Java轻松使用工具类实现获取MP3音频时长

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用工具类来获取一个MP3音频文件的时间长度,感兴趣的同学继续往下阅读吧
    2021-10-10
  • Java定时器Timer的源码分析

    Java定时器Timer的源码分析

    通过源码分析,我们可以更深入的了解其底层原理。本文将通过Timer的源码,带大家深入了解Java Timer的使用,感兴趣的小伙伴可以了解一下
    2022-11-11
  • Maven项目外部jar包导入的实现示例

    Maven项目外部jar包导入的实现示例

    在Maven项目里,我们经常需要导入jar包依赖,本文主要介绍了Maven项目外部jar包导入的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • RestTemplate发送请求时Cookie的影响及注意事项说明

    RestTemplate发送请求时Cookie的影响及注意事项说明

    这篇文章主要介绍了RestTemplate发送请求时Cookie的影响及注意事项说明,具有很好的参考价值,希望对大家有所帮助。
    2023-07-07
  • idea全局设置Maven配置的实现步骤

    idea全局设置Maven配置的实现步骤

    本文主要介绍了idea全局设置Maven配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • java中的Struts2拦截器详解

    java中的Struts2拦截器详解

    本篇文章主要介绍了java中的Struts2拦截器浅解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • SpringBoot redis分布式缓存实现过程解析

    SpringBoot redis分布式缓存实现过程解析

    这篇文章主要介绍了SpringBoot redis分布式缓存实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java的Jackson将json字符串转换成泛型List

    java的Jackson将json字符串转换成泛型List

    这篇文章主要介绍了java的Jackson将json字符串转换成泛型List ,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2017-02-02

最新评论