1. 程式人生 > >spring Boot 中文返回給瀏覽器亂碼 解析成問號?? fastJson jackJson

spring Boot 中文返回給瀏覽器亂碼 解析成問號?? fastJson jackJson

心路歷程:

在Controller中return 物件的時候,物件中的屬性值中文部分在瀏覽器中 顯示為問號??

 @ResponseBody
    @RequestMapping(value = "/test")
    public String view(@PathVariable Integer id) {
       //***
        return jsonVO.toString();
    }

然後結果是這樣的:??

嘗試排查原因:

中文亂碼常有以下三種:

1.request、response裡面的這個編碼設定
2.Tomcat 編碼設定
3.資料庫編碼設定

逐一排查:首先我直接return “中文”;結果還是亂碼。資料庫編碼   排除;

然後我寫了個過濾器:

@WebFilter(filterName = "myFilter", urlPatterns = "/*")
public class MyFilter implements Filter {
    @Override
    public void destroy() {
        System.out.println("過濾器銷燬");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        System.out.println("執行過濾操作");
        response.setCharacterEncoding("UTF-8");
        System.out.println(response.getCharacterEncoding());
        request.setCharacterEncoding("UTF-8");
        System.out.println(request.getCharacterEncoding());
        chain.doFilter(request, response);
    }
    @Override
    public void init(FilterConfig config) throws ServletException {
        System.out.println("過濾器初始化");
失敗,返回依然是亂碼;

接著嘗試:

return new String("中文".getBytes(), "UTF-8");  

失敗,返回依然是亂碼;

接著嘗試:

 produces = { "application/json;charset=UTF-8" }

 @RequestMapping(value = "/test", produces = { "application/json;charset=UTF-8" })

成功是成功了,可是這樣感覺很奇怪,總不能每一個RequestMapping 都這樣註解吧。

然後我就發現我封裝的jsonVO中使用的是fastjson 會不會是這個問題呢?

springboot 引入的json是 Jackjson,撞牆的想法都有了。


果斷處理:Application extends WebMvcConfigurerAdapter

重寫方法。

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        fastConverter.setFastJsonConfig(fastJsonConfig);
        converters.add(fastConverter);
    }

可以了。

如果覺得繼承這個WebMvcConfigurerAdapter類影響你繼承其他類,也可以寫個@bean 放在Application  中

retunr    HttpMessageConverter 型別就好;

總結:

1.新增  produces = { "application/json;charset=UTF-8" }

2.重寫configureMessageConverters方法;

[email protected]  HttpMessageConverter ;

相關推薦

spring Boot 中文返回瀏覽器亂碼 解析問號?? fastJson jackJson

心路歷程: 在Controller中return 物件的時候,物件中的屬性值中文部分在瀏覽器中 顯示為問號?? @ResponseBody @RequestMapping(value = "/test") public String view(@Path

解決spring boot中文亂碼問題

地址 今天 解決 正常 img alt mage com 沒有 在開發或學習當中,我們不可避免的會碰到中文亂碼的問題(好想哭,但還是要保持微笑!) 今天,在學習spring boot中碰到了中文亂碼問題。 首先,看了一下workspace是不是設置utf-8默認字符集:

spring boot: 中文顯示亂碼,在applicationContext裏面配置

true ble cati odi contex rop highlight Coding csharp spring boot: 中文顯示亂碼,在applicationContext裏面配置 applicationContext.properties #########

解決Spring Boot @Responsebody後IE瀏覽器返回json時提示下載問題

解決Spring boot返回JSON物件後在IE客戶端會提示下載JSON檔案的問題 Spring boot版本1.5.3.RELEASE 問題詳細原因:在一個通用上傳下載介面中,使用@[email protected](method=RequestMethod.

Spring Boot 中文亂碼解決

使用SpringBoot開發,對外開發介面供呼叫,傳入引數中有中文,出現中文亂碼,查了好多資料,總結解決方法如下: 第一步,約定傳參編碼格式 不管是使用httpclient,還是okhttp,都要設定傳參的編碼,為了統一,這裡全部設定為utf-8

使用mvc返回瀏覽器html元素時需要註意的一個問題

字符 html元素 使用 cot 就會 div 區別 div標簽 標簽 當直接使用 return Cotent(string str)返回給頁面html元素時,特別需要註意html標簽的格式 比如:返回"<div></div>" 在頁面上是能成功地被

spring boot 的常用註解使用 總結 解析

@PathVariable : 通過 @PathVariable 可以將 URL 中佔位符引數繫結到控制器處理方法的入參中:URL 中的 {xxx} 佔位符可以通過@PathVariable(“xxx“) 繫結到操作方法的入參中。 如圖所示:在訪問這個方法的時候,1就相當於這個

spring boot 統一返回資料及全域性異常處理

記錄關於spring boot 統一返回資料及全域性異常處理的操作實現。 一、統一返回資料 1、定義一個超類:BaseResponseVo @Data @NoArgsConstructor public class BaseResponseVo{ protected Integer r

Spring Boot介面返回json

一 實體類 1 User package com.imooc.pojo; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml

Spring Boot(17)配置檔案解析

Spring Boot(17)配置檔案解析   前言 上一篇介紹了Spring Boot的入門,知道了Spring Boot使用“習慣優於配置”(專案中存在大量的配置,此外還內建了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的專案快速執行起來。所以,我們要想把Spr

spring boot返回date為EEE MMM dd HH:mm:ss z yyyy(Fri Oct 26 00:00:00 CST 2018),轉換為 yyyy-MM-dd HH:mm:ss

問題:資料庫中日期型別為timestamp,實體類中定義為date,返回給到前端時變為了EEE MMM dd HH:mm:ss z yyyy(Fri Oct 26 00:00:00 CST 2018)格式,而我們需要的是yyyy-MM-dd HH:mm:ss。 解決方式: 在實體類定義中,定

Spring Boot 統一返回資料結構以及全域性異常處理

前言 看了廖師兄的視訊後,結合自己以前的程式設計經驗總結下 : 在 web 開發過程中, 後端要統一返回的資料結構,便於前端處理。例如每個請求,我們都需要知道 : code : 伺服器返回的狀態碼(主要給程式設計師看)。例如 : 200 : 請求成功。

Spring Boot乾貨系列:啟動原理解析,聖誕節提前快樂

前言 前面幾章我們見識了SpringBoot為我們做的自動配置,確實方便快捷,但是對於新手來說,如果不大懂SpringBoot內部啟動原理,以後難免會吃虧。所以這次博主就跟你們一起一步步揭開SpringBoot的神祕面紗,讓它不在神祕。 正文 我們開發任何一個Spring Boot專案,

Spring Boot乾貨系列:配置檔案解析

正文 Spring Boot使用了一個全域性的配置檔案application.properties,放在src/main/resources目錄下或者類路徑的/config下。Sping Boot的全域性配置檔案的作用是對一些預設配置的配置值進行修改。 接下來,讓我們一起來解開配置檔案的面紗

Spring boot中自定義Json引數解析

轉載請註明出處。。。 一、介紹 用過springMVC/spring boot的都清楚,在controller層接受引數,常用的都是兩種接受方式,如下 1 /** 2 * 請求路徑 http://127.0.0.1:8080/test 提交型別為application/json 3

spring boot http呼叫其他服務並解析

新建一個maven專案 pom和 上一個一樣就行了,注意properties裡面多一個 #tomcat server.port=8081 這樣我就直接把他埠改了--------瞬間整兒人就好了---- package ccy.consumer_movie; import

Spring-boot 配置返回頁面

一.jsp返回頁面: 1.專案結構圖: 這是打成war包,因為springboot打jar包,webapp檔案不會被打進去,雖然可以通過外掛實現,但是有點麻煩,這裡打成war包執行 也可通過 java -jar xx.war的形式執行   2.pom檔案,依賴上都

Spring Boot 整合ShiroSwagger&Druid放行資源

shiro的過濾器鏈配置: //放行靜態資源 filterChainDefinitionMap.put("/static/**", "anon");

Spring boot 自定義註解 簡單版本解析引數

背景:其實就是想用一個註解,來統一處理獲取userid的解析過程。 嗯,但是我覺得自己對註解也沒有那麼瞭解,所以再記錄下。spring boot 中自定義註解的方案:STEP1. 定義註解STEP2. 註解解析1. 定義註解import java.lang.annotatio

spring boot 介面返回值為null的屬性,忽略

1、註解形式 @JsonInclude(JsonInclude.Include.NON_NULL) 2、yml配置檔案 spring: jackson: default-property-inclusion: non_null