HttpMessageConverter<T>

本文介绍了Spring框架中HttpMessageConverter接口的功能与实现方法,包括如何将请求信息转换为对象及将对象输出为响应信息。详细解释了接口中的关键方法及其作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpMessageConverter<T>是Spring3.0新添加的一个重要接口,它负责将请求信息转换为一个对象,将对象输出为响应信息。

DispatcherServlet默认已安装了AnnotationMethodHandlerAdapter使用,将请求信息转换为对象,或将对象转换为相应信息。

HttpMessageConverter<T>接口定义以下几个方法:

1.Boolean canRead(Class<?> clazz,MediaType mediaType):指定转换器可以读取的对象类型,即转换器可将请求信息转换为clazz类型的对象,同时指定支持MIME类型(text/html,applaiction/json等),MIME媒体类型在RFC2616中定义

2.Boolean canWrite(Class<?> clazz,MediaType mediaType):指定转换器可以讲clazz类型的对象写到响应流中,响应流支持的媒体类型在MediaType中定义。

3.LIst<MediaType> getSupportMediaTypes():该转换器支持的媒体类型。

4.T read(Class<? extends T> clazz,HttpInputMessage inputMessage):将请求信息流转换为T类型的对象。

5.void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将T类型的对象写到响应流中,同时指定相应的媒体类型为contentType。

{"code":200,"msg":"sys.option.success","data":[{"checkType":"FIELD","fieldName":"modelNo","expected":"A2676","actual":"Not Found","valid":false},{"checkType":"FIELD","fieldName":"gtin","expected":"04549995463484","actual":"Not Found","valid":false},{"checkType":"FIELD","fieldName":"product","expected":"MW2K3AM/A","actual":"Not Found","valid":false},{"checkType":"FIELD","fieldName":"sscc18","expected":"101959490980003121","actual":"Not Found","valid":false},{"checkType":"FIELD","fieldName":"count","expected":"10","actual":"Not Found","valid":false},{"checkType":"FIELD","fieldName":"s1","expected":"(02)04549995463484(37)10","actual":"Not Found","valid":false}]}我选择xml还是这样的 在apifox里面我选择xml 我的代码@Configuration public class WebConfig implements WebMvcConfigurer { @Bean public MappingJackson2XmlHttpMessageConverter xmlConverter() { return new MappingJackson2XmlHttpMessageConverter(); } @Override public void configureMessageConverters(List<org.springframework.http.converter.HttpMessageConverter<?>> converters) { converters.add(xmlConverter()); converters.add(new MappingJackson2HttpMessageConverter()); } } public JsonNode parseJson(String jsonContent) throws Exception { // return this.objectMapper.readTree(jsonContent); try { // 尝试解析 JSON return objectMapper.readTree(jsonContent); } catch (Exception e) { try { // 尝试解析 XML return xmlMapper.readTree(jsonContent); } catch (Exception ex) { throw new Exception("Failed to parse JSON or XML", ex); } } } @PostMapping(value = "/compare",produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) public R compare(@RequestPart("File") MultipartFile file, @RequestPart("jsonContent") String jsonContent) { //读取PDF文本 String pdfText = compareService.extractContent(file); //解析JSON配置 JsonNode jsonConfig = null; try { jsonConfig = compareService.parseJson(jsonContent); } catch (Exception e) { return R.fail(MessageUtils.message("failed.convert.json")); } //执行对比校验 List<ValidationResult> results = compareService.compareContent(pdfText, jsonConfig); //返回没有匹配成功的数据 List<ValidationResult> failedResults = new ArrayList<>(); for (ValidationResult result : results) { if (!result.isValid()) { failedResults.add(result); } } if (failedResults.isEmpty()) { return R.ok("条件符合规范"); } else { return R.ok(failedResults); } }
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值