我们在接收前台传输的数据时,往往SpringBoot使用内置的数据类型转换器把我们提交的数据自动封装成对象等类型,我们知道spring boot的内置数据转换器有124个,几乎可以满足大部分请求参数的类型转换;但当前台发送请求传递的参数使用内置的转换器不能转换时,这时我们就需要写一个自定义的数据类型转换器。
springboot内置转换器
举个例子 ,当我们客户端发送的请求携带的参数springboot内置转换器不能转换时,如下所示:
我们就需要写一个自定义类型转换器来进行处理客户端发出请求携带的参数,如以下代码:
@Configuration
public class webconfigeration extends WebMvcConfigurationSupport {
/**
* 添加自定义类型转换器
* @param registry
*/
@Override
protected void addFormatters(FormatterRegistry registry) {
log.info("自定义转换器执行了");
registry.addConverter(new Converter<String, String[]>() {
@Override
public String[] convert(String s) {
String[] longs=s.split(",");
return longs;
}
});
}
}
我们的Controller层的方法中用字符串数组接收即可,这样就能接收客户端发送来的参数了。
@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {
/**
* 修改菜品售卖状态 可支持批量处理
* @param sta
* @param ids
* @return
*/
@PostMapping("/status/{sta}")
public R<String> editdishstatus(@PathVariable int sta,String[] ids){
log.info("状态为={}",sta);
//处理参数
List<Long> list= Arrays.stream(ids).map(item->{
return Long.parseLong(item);
}).collect(Collectors.toList());
//获取菜品集合
List<Dish> dishList=list.stream().map(item->{
Dish dish = new Dish();
dish.setId(item);
dish.setStatus(sta);
return dish;
}).collect(Collectors.toList());
//调用方法,对菜品状态进行修改
dishService.updateBatchById(dishList);
return R.success("修改成功!");
}
}