springboot同时支持访问html5和jsp时,导致后台ResponseBody返回中文乱码
背景:原系统是由springboot jsp,所有访问都是jsp
现在需要做HTML5定位,要同时支持访问HTML5和JSP
在application.yml的spring标签下配置
- mvc:
- #view:
- # 页面默认前缀目录
- prefix: /WEB-INF/jsp/
- # 响应页面默认后缀
- suffix: .jsp
- # # 配置JSP视图名
- view-names: '*'
- thymeleaf:
- cache: false
- prefix: /WEB-INF/html/
- suffix: .html
- mode: HTML5
- encoding: UTF-8
- view-names: html/*
发现访问jsp正常,html总是报500
看来还是没配置对
改成添加 配置文件,在配置文件中配置:
- @Configuration
- public class ViewResolverConfiguration {
- @Configuration//用来定义 DispatcherServlet 应用上下文中的 bean
- @EnableWebMvc
- @ComponentScan("com.*.**")
- public class WebConfig implements WebMvcConfigurer {
- @Bean
- public ViewResolver viewResolver() {
- InternalResourceViewResolver resolver = new InternalResourceViewResolver();
- resolver.setPrefix("/WEB-INF/jsp/");
- resolver.setSuffix(".jsp");
- resolver.setViewNames("*");
- resolver.setOrder(2);
- return resolver;
- }
- @Bean
- public ITemplateResolver templateResolver() {
- SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
- templateResolver.setTemplateMode("HTML5");
- templateResolver.setPrefix("/WEB-INF/");
- templateResolver.setSuffix(".html");
- templateResolver.setCharacterEncoding("utf-8");
- templateResolver.setCacheable(false);
- return templateResolver;
- }
- @Bean
- public SpringTemplateEngine templateEngine() {
- SpringTemplateEngine templateEngine = new SpringTemplateEngine();
- templateEngine.setTemplateResolver(templateResolver());
- return templateEngine;
- }
- @Bean
- public ThymeleafViewResolver viewResolverThymeLeaf() {
- ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
- viewResolver.setTemplateEngine(templateEngine());
- viewResolver.setCharacterEncoding("utf-8");
- viewResolver.setOrder(1);
- viewResolver.setViewNames(new String[]{"html/*"});
- return viewResolver;
- }
- @Override
- public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
- configurer.enable();
- }
- }
- }
pom.xml中添加依赖:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-thymeleaf</artifactId>
- </dependency>
大部分中都是访问jsp的
在jsp页面访问后台controller里返回页面
return "/a/b/c"; 这种绝对地址开头;
在html页面访问后台controll里返回页面
return "html/location"; 不以"/"开头;
jsp和html路径
WEB-INF/jsp/***
WEB-INF/html/***
到此:两种访问都没问题
但引发一个问题:对于jsp对应的Controller当返回json内容里,方法有注解@ResponseBody,返回到前台中文会乱码成????
解决方案:
在上面类ViewResolverConfiguration 中类WebConfig 中添加
- @Bean
- public HttpMessageConverter<String> responseBodyStringConverter() {
- StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
- return converter;
- }
- @Bean
- public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
- MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
- ObjectMapper objectMapper = new ObjectMapper();
- mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
- //设置中文编码格式
- List<MediaType> list = new ArrayList<MediaType>();
- list.add(MediaType.APPLICATION_JSON_UTF8);
- mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
- return mappingJackson2HttpMessageConverter;
- }
- @Override
- public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
- //解决中文乱码
- converters.add(responseBodyStringConverter());
- //解决 添加解决中文乱码后 上述配置之后,返回json数据直接报错 500:no convertter for return value of type
- converters.add(getMappingJackson2HttpMessageConverter());
- }
这样,两种访问都可以
注意:这里顺序
jsp resolver.setOrder(2);
html viewResolver.setOrder(1);
如果换成1,2,则html不能访问
order值越小,优先级越高,不知道为啥不行呢?
springboot同时支持访问html5和jsp时,导致后台ResponseBody返回中文乱码的更多相关文章
- Springboot @ResponseBody返回中文乱码
最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...
- JSP的学习(4)——中文乱码的解决
本篇将以JSP页面中可能存在的中文乱码问题进行分析和解决. 中文乱码的问题一直是国人在编程过程中的一大头疼问题,这点上在JSP.Servlet或Tomcat上随处可见.比如我们在写一个Servlet时 ...
- idea下启动tomcat时,打印的日志中文乱码
idea2018.2+tomcat8+java8+win10 异常:将编码方式全都修改为UTF-8后,且tomcat的VM启动参数中配置了:-Dfile.encoding=UTF-8.导致控制台日志打 ...
- JSP学习(一)之中文乱码问题的解决
一.响应中的乱码 我们所看到的页面,是由服务器把内容放入响应(response)中,然后发送给浏览器的.如果响应中的数据无法被正常解析,就会出现中文乱码.为什么英文不存在乱码问题?因为无论是ISO-8 ...
- Eclipse 创建文件快捷菜单、避免格式化时自动换行、.properties文件中文乱码、在线安装FreeMarker
创建文件快捷菜单设置 打开窗口“Customize Perspective - Java EE”,切换选项卡到“Shortcuts”: 进行一下配置: “Generate”:如上图勾选方式 " ...
- Web(Jsp+ Servlet)开发中如何解决中文乱码问题
1.中文乱码的成因 编码的字符集和解码的字符集不一致. 2.web开发过程中可能出现的乱码的位置及解决方案 ①request乱码 在向服务器传递数据时,所传递的中文有可能出现乱码. post请求(协议 ...
- hibernate连接时指定编码方式 hibernate中文乱码问题
<property name="connection.url">jdbc:mysql://localhost:3306/cms?useUnicode=true& ...
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
哎,天下文章一大抄,到处都是一模一样的教你怎么替换掉jackson成fastjson的,可后续中文乱码网上居然没一篇文章.翻了一会源码还是写个文章共享下吧.免得后来人又浪费时间折腾. 在springb ...
- JSP中Get提交方式的中文乱码解决
最近对JSP&Servlert的原理很感兴趣,所以今天花时间看了一下:无奈在一个编码问题上困扰很久 这是我的解决思路: (1)检查网页(html/jsp)页面的编码: (2)检查服务器端的处理 ...
随机推荐
- 【转帖】Linux 桌面进化史
Linux 桌面进化史 https://www.oschina.net/news/109440/how-linux-desktop-grown 与之前认识到的一样 桌面最开始 是 施乐公司研发的. 后 ...
- redis主从复制初识
一.作用 slave会通过被复制同步master上面的数据,形成数据副本 当master节点宕机时,slave可以升级为master节点承担写操作. 允许有一主多从,slave可以承担读操作,提高读性 ...
- Kubernetes---Pod hook
Pod hook(钩子)是由Kubernetes管理的kubelet发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中.可以同时为Pod中的所有容器都配置 hook ...
- 第一次安装Dev-c++编译器如何设置?Dev-c++神奇功能
安装完Dev-c++后,我们通常会根据自己的喜好调整设置,以下是个人的做法,欢迎参考. 1.字体 字体在安装界面就可以更改.默认字体是consolas,个人喜欢下面的courier new 有些字体很 ...
- Python 常用外部模块详解
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- Path.Combine(
// 获取程序的基目录. var dir1 = System.AppDomain.CurrentDomain.BaseDirectory; // 获取模块的完整路径. var dir2 = Syste ...
- Spring在Thread中注入Bean无效的解决方式
在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务.而通过Spring注入来管理和使用服务是较为合理的方式.但是若直接在Thread子类中通过注解方式注入Bean是无 ...
- vue项目中导出PDF的两种方式
参考大家导出的方式,基本上是如下两种: 1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了.对要求好的pdf这种方式真是不行啊! 2.调用浏览器 ...
- 小知识:修改IDEA的模板
小知识:修改IDEA的模板 有时候我们会发现,IDEA默认创建的模板并不是我们常用的.与其每次都在创建后进行修改,不如直接对模板进行修改. 给不知道怎么修改的同学指一下路: File->sett ...
- python之字符串类型的格式化
python之字符串类型的格式化 要点:python字符串通过format()方法进行格式化处理.(Python语言同时支持两种字符串格式化方法,一种类似C语言中printf()函数的格式化方法,支持 ...