springboot自定义属性和编码格式的设置

自定义属性
application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这

mysql.jdbcName=com.mysql.jdbc.Driver
mysql.jdbcUrl=jdbc:mysql://localhost:3306/test
mysql.userName=root
mysql.userPassword=root

然后直接在要使用的地方通过注解@Value(value=”${config.name}”)取出:

package com.example.demo.Controller;
import com.example.demo.properties.MysqlBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class DemoController {
    /**
     * 数据库的属性的注入
     */
    @Value(value="${mysql.jdbcName}")
    private String jdbcName;
    @Value(value="${mysql.jdbcUrl}")
    private String jdbcUrl;
    @Value(value="${mysql.userName}")
    private String userName;
    @Value(value="${mysql.userPassword}")
    private String userPassword;
    @RequestMapping("/sjk")
    public String shk(){
     return "mysql.jdbcName:"+jdbcName+"<br/>"                                   +"mysql.jdbcUrl:"+jdbcUrl+"<br/>"                 +"mysql.userName:"+userName+"<br/>"                  +"mysql.userPassword:"+userPassword+"</br>";
        }
    }

在这边配置中我们发现有一个特点,所有配置都是以”mysql”开头的,而且有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个MysqlProperties .java类,顶部需要使用注解@ConfigurationProperties(prefix = “mysql”)来进行声明:

package com.example.demo.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * @Component转换为实体bean
 */
@Component
@ConfigurationProperties(prefix = "mysql")
public class MysqlBean {
    private String jdbcName;
    private String jdbcUrl;
    private String userName;
    private String userPassword;
    public String getJdbcName() {
        return jdbcName;
    }
    public void setJdbcName(String jdbcName) {
        this.jdbcName = jdbcName;
    }
    public String getJdbcUrl() {
        return jdbcUrl;
    }
    public void setJdbcUrl(String jdbcUrl) {
        this.jdbcUrl = jdbcUrl;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPassword() {
        return userPassword;
    }
    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }
}
@Resource
   private MysqlBean mysqlBean;
        @RequestMapping("/sjk")
        public String shk(){
            return "mysql.jdbcName:"+mysqlBean.getJdbcName()+"<br/>"                  +"mysql.jdbcUrl:"+mysqlBean.getJdbcUrl()+"<br/>"                  +"mysql.userName:"+mysqlBean.getUserName()+"<br/>"                   +"mysql.userPassword:"+mysqlBean.getUserPassword()+"</br>";
        }

此时配置完还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean,如果不写RandomProperties.class,在bean类那边添加@Configuration或者@Component

@SpringBootApplication
@EnableConfigurationProperties({RandomProperties.class})
public class SpringbootdemoApplication 
    public static void main(String[] args) {     SpringApplication.run(SpringbootdemoApplication.class, args);
    }
}

把所有的自定义配置都放在application.properties里面会显得臃肿,这时候我们可以另外定义一个配置文件,这里我明取名为random.properties,路径放在src/main/resources/waiting下面。
这里只需要在之前的bean上添加@PropertySource(“classpath:waiting/random.properties”) 和@Configuration这个注解就可以了。
注意:不能再采取之前的@EnableConfigurationProperties({RandomProperties.class})这个方法。
最后controller层或service获取的时候用@Autowired注解就可以获取。

中文乱码问题

当在.properties的配置文件中有中文时,读取出来的是乱码。需要进行如下操作:
1、添加配置

设置spring-boot 编码格式

banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8

1
2
3
4
5
6
7

2、设置文件类型

将application.properites的文件类型修改为UTF-8的编码类型。
通过以上方法测试获取出来的值还是乱码。

解决办法
2.1、IDEA

设置 File Encodings的Transparent native-to-ascii conversion为true,具体步骤如下:
依次点击
File -> Settings -> Editor -> File Encodings
将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。
注解
@RequestMapping 配置url 映射
@Controller 处理http请求
@RestController 处理ajax的请求
@PathVariable 获取url 参数
@RequestParam 获取请求的参数

@Controller
@RequestMapping("/param")
public class ParamController {
    @RequestMapping("/query")
    public ModelAndView query(@RequestParam(value = "q",required = false)String q ){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("q",q);
        ***modelAndView.setViewName("param");***
        return  modelAndView;
    }
}

这里出现一个错误, modelAndView.setViewName(“param”);和@RequestMapping(“/param”)

猜你喜欢

转载自blog.csdn.net/qq_27219335/article/details/79971459