SpringBoot - 自定义对象参数绑定

系统中的WebDataBinder中内置了很多的Converter用于将客户端的参数转换成我们服务器端JavaBean的属性中

  • 自定义Converter
  • 将我们自定义的Converter添加到系统中去
  • 系统在进行属性绑定的时候就会按照我们客户端的参数类型和我们服务器就收的类型选择合适的Converter

自定义Converter,编写转换规则:将接受到的参数按照分号分隔,将第一个值赋值成Person对象的名字,第二个值赋值成Person对象的年龄

public class MyConverter implements Converter<String, Person> {

    @Override
    public Person convert(String s) {

        //转换规则:将接受到的参数按照分号分隔,将第一个值赋值成Person对象的名字,第二个值赋值成Person对象的年龄
        if (StringUtils.hasLength(s)) {
            String[] ss = s.split(";");
            Person person = new Person();
            person.setName(ss[0]);
            person.setAge(Integer.valueOf(ss[1]));
            return person;
        }
        return null;
    }
}

将我们自定义的Converter添加到系统中去:通过SpringMVC配置

@EnableWebMvc//SpringBoot底层就是SpringMVC的支持
@Configuration//告诉SpringBoot这是一个配置类
public class MyConfig {

    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                MyConverter converter = new MyConverter();
                registry.addConverter(converter);
            }
         
        };
    }
}

服务端写controller接受客户端请求:编写一个save-person方法,接受参数为Person对象,返回值就是直接将接收到的Person对象返回

@RestController
public class PersonController {


    @GetMapping("/save-person")
    public Person savePerson(Person person) {
        return person;
    }

}

客户端发送请求:参数就直接写成person=WangWu;21,而不是之前的name=WangWu&age=21,返回的的Person对象就会按照我们自定义的Converter规则进行解析

Guess you like

Origin blog.csdn.net/qq_27062249/article/details/118274011