Spring基础篇:自定义类型转换和中文字符串返回乱码

简介: 自定义类型转换和中文字符串返回乱码

场景使用

前端提交的数据到后端转换中出现了问题,常见的一种情况是:日期的转换。由于前端常使用日期选择器选择日期,它的格式常有:2022/12/20或者2022-12-20这样,传递的时候会以字符串的形式传递。后端定义Bean的时候,属性成员通常是DATE类型,若没有定义规则时,转换出错

Spring的解决方案:定义类型转换器

该类型转换器通过要与SpringMVC相结合使用,这里了解它具体怎么使用即可。

1.实现Converter接口

接口Converter提供了泛型ST

  • S表示:Source,是指被转换的类型,这里是指String类型
  • T表示:Target,是指需要转换成什么类型,这里是指Date类型
public interface Converter<S, T> {

编写一个名为:String2Date类,实现Converter接口。

注意: Converter接口在jackson包中或者其他包中也有。这里需要导入的是 org.springframework.core.convert.converter.Converter包中的。
public class String2Date implements Converter<String,Date> {

    @Override
    public Date convert(String source) {
        if (StringUtils.hasText(source)) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            try {
                return dateFormat.parse(source);
            } catch (ParseException e) {
                return null;
            }
        }
        return null;
    }
}

这里使用的是SimpleDateFormat转换的是xxxx-xx-xx格式的字符串

2.在配置类中实现WebMvcConfigurer接口,开启@EnableWebMvc注解

这里的配置类是指MVC的配置类,通常第一步做的工作就是实现WebMvcConfigurer接口,然后选择性的实现其中的方法,这里我们需要实现的是addFormatters方法,添加自定义类型转换的类。

public class EnableWebMvcConfiguration implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new String2DateConverter());
    }
}

配置类需要加的注解@Configuration,除此之外还需要加上@EnableWebMvc表示支持MVC的配置(因为WebMvcConfigurer接口就是属于MVC的配置)。

以上就是Spring-Web方面,前后端数据传递时,字符串转Date的方法。

单元测试

可以单独写一个单元测试,测试String2Date类。IDEA可以通过ALT+INSERT轻松创建单元测试。

SpringMVC使用@ResponseBody返回中文字符串,乱码

这里写了一个/demo的请求,使用PostMan测试的时候,会显示乱码。

@GetMapping("/demo")
@ResponseBody
public String demo(){
    return "你好";
}

乱码的问题是因为SpringMVC默认的返回编码:
Content-Type:"text/plain;charset=ISO-8859-1"
image.png
这个编码在返回中文值的时候会产生乱码,解决方法是,重新设置一下SpringMVC关于字符串的返回编码。

这里以注解方式为主,贴上核心的代码,该代码是SpringMVC配置类(配置类需要实现该接口implements WebMvcConfigurer

@Bean
public HttpMessageConverter<String> responseBodyConverter() {
    return new StringHttpMessageConverter(StandardCharsets.UTF_8);
}

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    WebMvcConfigurer.super.configureMessageConverters(converters);
    converters.add(responseBodyConverter());
}

设置完成之后,再次测试。
Content-Type:"text/plain;charset=UTF-8"
image.png
解决了中文乱码问题。

目录
相关文章
|
7月前
|
Java Spring
Spring解决数据乱码问题-spring21
Spring解决数据乱码问题-spring21
|
8月前
|
前端开发 Java Spring
Java 新手如何使用Spring MVC 中的查询字符串和查询参数
Java 新手如何使用Spring MVC 中的查询字符串和查询参数
|
XML 前端开发 安全
kotlin使用spring mvc将接收的字符串生成二维码并响应
使用kotlin制作一个基于`spring mvc`的小demo:接收请求中的字符串参数,用`zxing`将字符串生成出一个二维码,再返回给前端。可以通过此例来了解kotlin与spring的搭配
307 1
|
数据采集 XML 前端开发
Spring MVC(spring-webmvc)之全局数据处理、拦截器、自定义类型转换器等使用指南
Spring MVC(spring-webmvc)之全局数据处理、拦截器、自定义类型转换器等使用指南
250 0
Spring MVC(spring-webmvc)之全局数据处理、拦截器、自定义类型转换器等使用指南
|
JSON 前端开发 Java
【Spring MVC】(四)Spring MVC响应视图(字符串的方式、ModelAndView 对象、JSON 数据)、统一异常处理(普通请求、AJAX 请求)
【Spring MVC】(四)Spring MVC响应视图(字符串的方式、ModelAndView 对象、JSON 数据)、统一异常处理(普通请求、AJAX 请求)
549 0
【Spring MVC】(四)Spring MVC响应视图(字符串的方式、ModelAndView 对象、JSON 数据)、统一异常处理(普通请求、AJAX 请求)
|
Java Spring
Spring怎么又 bug 了,响应结果居然乱码了?
Spring怎么又 bug 了,响应结果居然乱码了?
153 0
Spring怎么又 bug 了,响应结果居然乱码了?
|
JSON Java 测试技术
Spring Boot MockMvc通过Body传Json字符串
Spring Boot MockMvc通过Body传Json字符串
745 0
|
Java Apache Spring
Spring RestTemplate 调用天气预报接口乱码的解决
Spring RestTemplate 调用天气预报接口可能遇到中文乱码的问题,解决思路如下。
4888 0
|
JSON 安全 Java
spring security未登陆时,不跳转登陆页面改为返回JSON字符串
集成spring security时,因为是前后端分离,所以不能跳转到登陆页面,而是返回未登陆的JSON串。 解决办法如下: 重写LoginUrlAuthenticationEntryPoint方法,将该方法里的commence改成返回json串 ...
3424 0
|
Java Spring 数据格式
【spring boot logback】spring boot中logback日志乱码问题
在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码。   控制台看到打印日志乱码如下:   而日志文件打开: 记事本打开 sublime打开     关于这个问题,分析如下: 1.打印的“进入Controller日志控制中心----》》》”字样可以看出,至少代码本身和IDE环境的编码方式没有任何的关系; 2.打印出来的日志是logback-spring.xml文件起作用之后,显示在控制台的,而日志文件打开后,看到 不同的文本编辑器打开是不一样的。
4425 0