在项目的文件管理模块中有用到自定义content-type,以及自动匹配HttpMessageConverter,
某童鞋 在解决这些问题的时候遇到了点困难
今天研究了半天分享下 springmvc通过自定义http accept或者content-type自动选择HttpMessageConverter
RestTmplate设置headers:
restTemplate设置headers有三种方式
1、通过设置MessageConverters
2、通过设置拦截器(ClientHttpRequestInterceptor)
3、通过配置HttpHeaders
一般的restTemplate请求都可以设置HttpHeaders,因此HttpHeaders是比较容易想到的。
但使用http get方式的时候restTemplate没有设置HttpHeaders的地方
文件管理器模块有个功能是直接获取文件的字节数组返回给客户端,以提高javascript客户端的解析速度
返回byte[] 需要有相应解析器:ByteArrayHttpMessageConverter。它对应的Content-Type是application/octet-stream
而我们用的是自定义的:application/bytes ,
在服务端配置文件加入下面配置
<bean id="byteConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/bytes</value>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter ">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
//信息转换器放入适配器中
<ref bean="byteConverter" />
</list>
</property>
</bean>
然后在方法上设置headers
@RequestMapping(value = "/public/{appId}/{fileName}", method = RequestMethod.GET, headers = { "content-type=application/bytes" })
服务端的配置完成
客户端restTemplate不能使用HttpHeaders,只能用后两种
RestTemplate初始化的时候会加入5个信息转换器,其中就有ByteArrayHttpMessageConverter,
这样到服务端加上自己设置的就有6种类型,在自动匹配HttpMessageConverter会匹配到不是自己想要的转换器,比如这6个在getBytes这个功能的测试中,会匹配成json的转换器。
为避免这样就在RestTemplate请求前,用自定义Content-Type的ByteArrayHttpMessageConverter覆盖默认的配置
通过设置HttpMessageConverters
ByteArrayHttpMessageConverter converter = new ByteArrayHttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.valueOf("application/bytes")));
restTemplate.setMessageConverters((List)Collections.singletonList(converter));
通过设置ClientHttpRequestInterceptor
ClientHttpRequestInterceptor interceptor= new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
HttpRequestWrapper wrapper = new HttpRequestWrapper(request);
MediaType mt=MediaType.valueOf("application/bytes");
wrapper.getHeaders().setContentType(mt);
wrapper.getHeaders().setAccept((List)Collections.singletonList(mt));
return execution.execute(wrapper, body);
}
};
restTemplate.setInterceptors(Collections.singletonList(interceptor));
分享到:
相关推荐
SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...
基于SpringMVC Mybatis Shiro Redis 的权限管理系统,该系统已经部署到线上,线上访问地址:http://shiro.itboy.net,登录账号:admin 密码:sojson,,详细教程参考sojson.com/shiro
SpringMVC源码剖析(五)- 消息转换器HttpMessageConverter1 在SpringMVC中,有一个非常重要的机制,即消息转换器HttpMessageConverter,它负责将HTTP请求和响应报文转换为Java对象和反之。为了更好地理解这个机制...
在进行web项目的开发时,如果时间让用户自己输入,该怎么处理,SpringMVC的转换器可以处理,但是需要自己定义,如何定义和搭配呢?
- **数据校验**:SpringMVC提供了强大的数据验证机制,可以通过@Validated注解结合JSR303/JSR349标准来实现自动数据校验。 #### 十、处理JSON:使用HttpMessageConverter - **JSON处理**:使用...
《SpringMVC-Mybatis-Shiro-Redis:构建安全高效的Web应用》 在现代Web开发中,构建一个高效且安全的后端系统是至关重要的。本文将深入探讨一个基于SpringMVC、Mybatis、Shiro和Redis的Web应用架构,这四个组件共同...
《SpringMVC-Mybatis-Shiro-Redis整合实践详解》 在现代Web开发中,SpringMVC、Mybatis、Shiro以及Redis等技术是构建高效、安全、可扩展的Web应用的重要组件。本文将深入探讨这些技术的集成与应用,以"SpringMVC-...
springMVC3学习(八)--全局的异常处理(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/26286435
SpringMVC注解工程(eclipse-jee-2020-12-R)
使用XML或Java配置,或者结合Spring Boot的自动配置。 3. **配置Spring Data JPA**:在Spring配置中添加JPA和DataSource的相关配置,包括实体管理工厂、事务管理器、数据源等。还需要在pom.xml中引入对应的JPA和...
springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091
springMVC3学习(六)--SimpleFormController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988733
Spring4.2 + SpringMVC4.2 + Mybatis3.3 + Mybatis-Plus(Mybatis的插件,封装了CRUD和分页查询等功能) + log4j + shrio权限框架,可直接用于后台的开发。
springMVC3学习(十一)--文件上传CommonsMultipartFile(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/27976873
springMVC3学习(十二)--文件上传优化CommonsMultipartResolver(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/27977329
本整合包提供了这三个组件的最新版本,即mybatis-3.4.5、springMVC-5.0.4和mybatis-spring-1.3.2,旨在帮助开发者快速搭建基于这些技术的项目环境。 **MyBatis** 是一个优秀的持久层框架,它支持定制化SQL、存储...
springMVC3学习(四)--访问静态文件如js,jpg,css(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25987411
- SpringMVC允许自定义拦截器,实现预处理和后处理逻辑,如登录检查、权限控制等。 4. **数据验证** - 使用`@Valid`和JSR-303/JSR-349提供的注解(如`@NotNull`, `@Size`, `@Min`, `@Max`等)进行数据校验。 5. ...
SpringMVC的文件下载方式
SpringMVC作为Java EE开发中广泛使用的MVC框架,它基于模型-视图-控制器(Model-View-Controller,MVC)的设计模式,为Web层开发提供了清晰的角色划分和灵活的配置。在传智播客提供的“Springmvc+Mybatis由浅入深...