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测试
在这里插入图片描述
在这里插入图片描述

发布了78 篇原创文章 · 获赞 20 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/tangyajun_168/article/details/103161265