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測試
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章