spring-boot使用自定义HttpMessageConverter将application/x-www-form-urlencoded请求数据转为对象

1.定义converter

public class CustomerMessageConverter extends AbstractHttpMessageConverter<T> {
	private static final FormHttpMessageConverter formHttpMessageConverter=new FormHttpMessageConverter();
	private static final ObjectMapper mapper=new ObjectMapper();

	@Override
	protected boolean supports(Class<?> aClass) {
		return T.class==aClass;
	}

	@Override
	protected T readInternal(Class<? extends T> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
		Map<String,String> map=formHttpMessageConverter.read(null,httpInputMessage).toSingleValueMap();
		return mapper.convertValue(map,T.class);
	}

	@Override
	protected void writeInternal(T t, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {

	}
}

2.MvcConfiguer中添加自定义converter

@Configuration
public class MvcConfigurer  implements WebMvcConfigurer {
	@Bean
    public CustomerMessageConverter customerMessageConverter() {
        CustomerMessageConverter converter=new CustomerMessageConverter();
        converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_FORM_URLENCODED));
        return converter;
    }
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(customerMessageConverter());
    }
}

3.编写实体类

@Data
public class Student {
	String name;
	int age;
	String phone;
	String address;
	String reqJson;
}

4.编写controller

@RestController
@RequestMapping(value = "/test")
public class TestController {
	private Logger logger= LoggerFactory.getLogger(getClass());

	@PostMapping(consumes = {"application/x-www-form-urlencoded;charset=UTF-8"})
	public WebResponseResult test(@ModelAttribute Student student) {
		logger.info("---"+student.getName()+","+student.getAge()+","+student.getPhone()+","+student.getAddress());
		return WebResponseResult.success(student);
	}
}

5.使用postman测试
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值