2014-10-06 55 views
1

我已經修改了很多地方,使我的Spring MVC能夠使用UTF-8工作,包括char過濾器,jsp中的contextType以及固定的MySQL,所以我的項目與UTF-8完美配合。爲什麼這個Spring MVC控制器返回損壞的UTF-8字符串?

然而,這個新添加的功能將不會得到正確

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8") 
public @ResponseBody 
String uploadFileHandler(
     @RequestParam("name") String name, 
     @RequestParam("type") String type, 
     @RequestParam("file") MultipartFile file//, HttpServletResponse response 
     ) throws IOException { 
//  response.setCharacterEncoding("UTF-8"); 
     if (file.isEmpty()) 
      return "Empty"; 

正如你所看到的,我已經把procudes,和所以setCharacterEncoding。返回的字符串是在阿賈克斯用,我有

 var ajax = new XMLHttpRequest(); 
     ajax.overrideMimeType('text/xml;charset=UTF-8'); 

這裏是形式開始在JSP

<form name = "myForm" method="POST" onsubmit="return validateForm()" enctype="multipart/form-data"> 

但我的網頁仍顯示????。那我還有什麼遺漏?我沒有JQuery,所以希望一個解決方案,除非必須使用它。

+0

'返回'空''線看起來很有趣。你確定這些是ASCII字符嗎?也許他們不是 - 剪切和粘貼也許? – 2014-10-06 03:58:35

+0

tomcat或glassfish? – 2014-10-06 09:23:01

+0

@AlvinBunk空是UTF-8而不是ascii。看看這些信件。我認爲這是tomcat – Splash 2014-10-07 00:56:38

回答

2

project.build.sourceEncoding發現這個鏈接有關ResponseBody問題返回UTF-8字符串由於春天網站 「錯誤」

摘要:

  1. 設置org.springframework.web.filter.CharacterEncodingFilter在web.xml中強制執行UTF-8
  2. 在彈簧servlet.xml中設置<value>text/plain;charset=UTF-8</value>通過創建自己的類
  3. 消除
  4. StringHttpMessageConverter問題
0

置入配置

@Bean 
public org.springframework.web.filter.CharacterEncodingFilter characterEncodingFilter() { 
    org.springframework.web.filter.CharacterEncodingFilter characterEncodingFilter = new org.springframework.web.filter.CharacterEncodingFilter(); 
    characterEncodingFilter.setEncoding("UTF-8"); 
    characterEncodingFilter.setForceEncoding(true); 
    return characterEncodingFilter; 
} 

在控制器映射 可以添加

produces = "text/plain;charset=UTF-8"

但不

produces = "text/html;charset=UTF-8"

例如:GetMapping()迫使ResponseBody輸出編碼的UTF-8

@GetMapping(value = "/oith/getProcess", produces = "text/plain;charset=utf-8") 
public @ResponseBody 
ResponseEntity<String> getProcess(@RequestParam(value = "module") BigInteger moduleId) { 
    return new ResponseEntity<>("any text...", HttpStatus.CREATED); 
} 
相關問題