解决springboot中读取ValidationMessages.properties中的文件乱码问题

起因是因为在做自定义注解校验数据的时候,发现返回的配置文件中的数据为乱码


这是注解代码

校验数据注解


获取到的数据为乱码

返回数据


解决:去写一个类去继承WebMvcConfigurationSupport并重写他的extendMessageConverters()方法和getValidator方法()

import org.springframework.boot.validation.MessageInterpolatorFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * 解决ListValue注解返回的message中文乱码问题
 * @author 胡凯贤
 * @date 2022年10月04日 21:09
 */
@Configuration
public class WebMvnConfig extends WebMvcConfigurationSupport {

    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 解决controller返回字符串中文乱码问题
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
            } else if (converter instanceof MappingJackson2HttpMessageConverter) {
                ((MappingJackson2HttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
            }
        }
    }

    @Override
    protected Validator getValidator() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setDefaultEncoding("utf-8");// 读取配置文件的编码格式
        messageSource.setCacheMillis(-1);// 缓存时间,-1表示不过期
        messageSource.setBasename("ValidationMessages");// 配置文件前缀名,设置为Messages,那你的配置文件必须以Messages.properties/Message_en.properties...

        LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
        MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
        factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
        factoryBean.setValidationMessageSource(messageSource);
        return factoryBean;
    }
}


再次查看返回的数据即可解决

请添加图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Validation是一种用于校验数据的框架,它提供了一系列的注解和工具类,用于对数据进行验证。在Java,有两个常用的校验注解:@Valid和@Validated。这两个注解的功能大部分相似,但也有一些区别。 @Valid注解属于javax.validation包下的注解,而@Validated注解属于Spring框架下的注解。@Valid注解支持嵌套校验,即可以对对象的属性进行递归校验,而@Validated注解不支持嵌套校验。另外,@Validated注解支持分组校验,可以根据不同的分组对数据进行不同的校验,而@Valid注解不支持分组校验。 在实际业务,如果需要对数据进行校验,可以使用已有的校验注解,如@NotNull、@Size等。但是有时候这些注解可能无法满足业务需求,这时可以考虑自定义Validation注解。自定义Validation注解可以通过编写自定义的校验器来实现对数据的校验。 使用@Validated注解时,可以在需要校验的Model上加上@Valid注解。同时,可以使用通用的Validator校验工具类来对对象进行校验。该工具类使用了Java的Validator接口来进行校验,可以根据校验结果抛出异常或返回校验结果。 总结起来,Validation是一种用于校验数据的框架,提供了@Valid和@Validated两个注解,可以用于对数据进行校验。@Valid注解属于javax.validation包下的注解,支持嵌套校验;@Validated注解属于Spring框架下的注解,支持分组校验。自定义Validation注解可以通过编写自定义的校验器来实现对数据的校验。可以使用通用的Validator校验工具类来对对象进行校验。 #### 引用[.reference_title] - *1* *2* [SpringBoot使用Validation校验参数](https://blog.csdn.net/justry_deng/article/details/86571671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java类属性字段校验(validation的使用)](https://blog.csdn.net/rao991207823/article/details/117001686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值