使用String类型的参数,而用户提交给后端的字符串可以说五花八门:" 1111 ", " 22222", "45455 "。如果不对这些空格进行处理,还会引起一些不必要的麻烦 、参数Long前端精度丢失;
String类型的参数通常两种方式:
1. form和 url的参数
@RestControllerAdvice
public class GlobalHandler {
/**
* url和form表单中的参数trim
*
* @param binder
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
// 构造方法中 boolean 参数含义为如果是空白字符串, 是否转换为 null
// 即如果为 true, 那么 "" 会被转换为 null, 否者为""
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
// .....
}
2. body里的参数
GitHub - mcks2000/springboot-buckets: SpringBoot 全家桶 —— 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成SpringBoot 全家桶 —— 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成 - GitHub - mcks2000/springboot-buckets: SpringBoot 全家桶 —— 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成https://github.com/mcks2000/springboot-buckets.git
3. 参数Long前端精度丢失
@Slf4j
@Configuration
@Order(2)
public class WebMvcConfig extends WebMvcConfigurerAdapter {
//......
/**
* 处理 长数据Long输出精度丢失场景,特将转成String序列化输出
* @param converters
*/
@Override
public void configureMessageConverters(List> converters) {
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(long.class, ToStringSerializer.instance);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(simpleModule);
messageConverter.setObjectMapper(objectMapper);
converters.add(messageConverter);
}
//......
}