目录
4.将自定义的转换器注册到WebMvcConfigurer中
概述
场景应用:自定义参数解析器,把接收到的字符串参数解析成自定义的对象。
项目目录结构
1.创建实体类
Car.java
package com.corner.boot.bean;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class Car {
private String brand;
private double price;
@Override
public String toString() {
return "Car{" +
"brand='" + brand + ''' +
", price=" + price +
'}';
}
}
2.创建控制器类
ParamController.java
package com.corner.boot.controller;
import com.corner.boot.bean.Car;
import org.springframework.web.bind.annotation.*;
@RestController
@ResponseBody
@RequestMapping("/parameter")
public class ParamController {
@GetMapping("/converter")
public Car car(@RequestParam("carStr") Car carStr) {
System.out.println(carStr);
return carStr;
}
}
3.创建自定义格式化转换器类
StringToCarConverter.java
/**参数转换
* 将BYD,12.22字符串转换成Car对象
*/
package com.corner.boot.config.converter;
import com.corner.boot.bean.Car;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import static java.lang.Double.parseDouble;
@Component
public class StringToCarConverter implements Converter<String,Car> {
@Override
public Car convert(String s) {
if(!StringUtils.isEmpty(s)){
Car car = new Car();
String[] arr = s.split(",");
car.setBrand(arr[0]);
car.setPrice(parseDouble(arr[1]));
return car;
}
return null;
}
}
在使用时,必须编写一个实现org.springframework.core.convert.converter.Converter接口的java类,这里的S表示源类型,T表示目标类型。
4.将自定义的转换器注册到WebMvcConfigurer中
package com.corner.boot.config;
import com.corner.boot.config.converter.StringToCarConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.FormatterRegistry;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Component
public class WebConfigurer implements WebMvcConfigurer {
@Autowired
StringToCarConverter StringToCarConverter;
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(StringToCarConverter);
}
}
5.请求测试
请求接口路径
转换结果
Car{brand='BYD', price=12.22}
选择Converter还是Formatter
Converter是一般工具,可以将一种类型转换成另一种类型。例如,将String转换成Date,或者将Long转换成Date。Converter既可以用在web层,也可以用在其它层中。
Formatter只能将String转成成另一种java类型。例如,将String转换成Date,但它不能将Long转换成Date。所以,Formatter适用于web层。为此,在Spring MVC应用程序中,选择Formatter比选择Converter更合适。