Spring MVC 关于controller的字符编码问题

<div id="cnblogs\_post\_body" class="blogpost-body cnblogs-markdown"><div id="content"> <p>在使用springMVC框架构建web应用,客户端常会请求字符串、整型、json等格式的数据,通常使用@ResponseBody注解使 controller回应相应的数据而不是去渲染某个页面。如果请求的是非英文格式的字符串,往往在客户端显示的是乱码。原因是spring的 StringHttpMessageConverter默认的字符类型是iso8895-1 ‘西欧语言',中文等字符需要单独指定。</p> <p><strong>这里总结几种解决方案:</strong><br> </p> <p>1.不使用@ResponseBody注解,使用HttpServeletResponse设置contentType属性</p> <div class="jb51code"> <div><div id="highlighter\_80537" class="syntaxhighlighter java"><div class="toolbar"><span><a href="#" class="toolbar\_item command\_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java color1">@RequestMapping</code><code class="java plain">(value =</code><code class="java string">"/rest/create/document"</code><code class="java plain">) </code></div><div class="line number2 index1 alt1"><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">create(Document document, HttpServletRespone respone) { </code></div><div class="line number3 index2 alt2"><code class="java plain">repoonse.setContentType(</code><code class="java string">"text/plain;charset='utf-8'"</code><code class="java plain">); </code></div><div class="line number4 index3 alt1"><code class="java plain">response.write(</code><code class="java string">"中文string"</code><code class="java plain">); </code></div><div class="line number5 index4 alt2"><code class="java plain">}</code></div></div></td></tr></tbody></table></div></div> </div> <p>2.返回Response Entity object,设置contentType,例:</p> <div class="jb51code"> <div><div id="highlighter\_112060" class="syntaxhighlighter java"><div class="toolbar"><span><a href="#" class="toolbar\_item command\_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java color1">@RequestMapping</code><code class="java plain">(value = </code><code class="java string">"/rest/create/document"</code><code class="java plain">) </code><code class="java keyword">public</code> <code class="java plain">ResponseEntity&lt;String&gt; create(Document document, HttpServletRespone respone) { </code></div><div class="line number2 index1 alt1"><code class="java plain">HttpHeaders responseHeaders = </code><code class="java keyword">new</code> <code class="java plain">HttpHeaders(); responseHeaders.add(</code><code class="java string">"Content-Type"</code><code class="java plain">, </code><code class="java string">"text/html; charset=utf-8"</code><code class="java plain">); </code></div><div class="line number3 index2 alt2"><code class="java plain">Document newDocument = DocumentService.create(Document); </code></div><div class="line number4 index3 alt1"><code class="java plain">String json = jsonSerializer.serialize(newDocument); </code></div><div class="line number5 index4 alt2"><code class="java keyword">return</code> <code class="java keyword">new</code> <code class="java plain">ResponseEntity&lt;String&gt;(json, responseHeaders, HttpStatus.OK); </code></div><div class="line number6 index5 alt1"><code class="java plain">}</code></div></div></td></tr></tbody></table></div></div> </div> <p>3.使用produces属性:</p> <div class="jb51code"> <div><div id="highlighter\_996625" class="syntaxhighlighter java"><div class="toolbar"><span><a href="#" class="toolbar\_item command\_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java color1">@RequestMapping</code><code class="java plain">(value = </code><code class="java string">"/rest/create/document"</code><code class="java plain">,produces= </code><code class="java string">"text/plain;charset=UTF-8"</code><code class="java plain">) </code><code class="java comments">//返回的内容类型</code></div><div class="line number2 index1 alt1"><code class="java color1">@ResponseBody</code></div><div class="line number3 index2 alt2"><code class="java keyword">public</code> <code class="java plain">String create(Document document, HttpServletRespone respone) </code><code class="java keyword">throws</code> <code class="java plain">UnsupportedEncodingException { </code></div><div class="line number4 index3 alt1"><code class="java plain">Document newDocument = DocumentService.create(Document); </code></div><div class="line number5 index4 alt2"><code class="java keyword">return</code> <code class="java plain">jsonSerializer.serialize(newDocument); </code></div><div class="line number6 index5 alt1"><code class="java plain">}</code></div></div></td></tr></tbody></table></div></div> </div> <p><strong>@RequestMapping</strong></p> <p>参数绑定(@RequestParam、 @RequestBody、 @RequestHeader 、 @PathVariable)</p> <div class="jb51code"> <div><div id="highlighter\_580602" class="syntaxhighlighter java"><div class="toolbar"><span><a href="#" class="toolbar\_item command\_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java keyword">package</code> <code class="java plain">org.springframework.web.bind.annotation;</code></div><div class="line number2 index1 alt1">&nbsp;</div><div class="line number3 index2 alt2"><code class="java keyword">import</code> <code class="java plain">java.lang.annotation.Documented;</code></div><div class="line number4 index3 alt1"><code class="java keyword">import</code> <code class="java plain">java.lang.annotation.ElementType;</code></div><div class="line number5 index4 alt2"><code class="java keyword">import</code> <code class="java plain">java.lang.annotation.Retention;</code></div><div class="line number6 index5 alt1"><code class="java keyword">import</code> <code class="java plain">java.lang.annotation.RetentionPolicy;</code></div><div class="line number7 index6 alt2"><code class="java keyword">import</code> <code class="java plain">java.lang.annotation.Target;</code></div><div class="line number8 index7 alt1"><code class="java keyword">import</code> <code class="java plain">org.springframework.web.bind.annotation.Mapping;</code></div><div class="line number9 index8 alt2"><code class="java keyword">import</code> <code class="java plain">org.springframework.web.bind.annotation.RequestMethod;</code></div><div class="line number10 index9 alt1">&nbsp;</div><div class="line number11 index10 alt2"><code class="java color1">@Target</code><code class="java plain">({ElementType.METHOD, ElementType.TYPE})</code></div><div class="line number12 index11 alt1"><code class="java color1">@Retention</code><code class="java plain">(RetentionPolicy.RUNTIME)</code></div><div class="line number13 index12 alt2"><code class="java color1">@Documented</code></div><div class="line number14 index13 alt1"><code class="java color1">@Mapping</code></div><div class="line number15 index14 alt2"><code class="java keyword">public</code> <code class="java color2">@interface</code> <code class="java plain">RequestMapping {</code></div><div class="line number16 index15 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">String name() </code><code class="java keyword">default</code> <code class="java string">""</code><code class="java plain">;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">String\[\] value() </code><code class="java keyword">default</code> <code class="java plain">{};</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">RequestMethod\[\] method() </code><code class="java keyword">default</code> <code class="java plain">{};</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">String\[\] params() </code><code class="java keyword">default</code> <code class="java plain">{};</code></div><div class="line number23 index22 alt2">&nbsp;</div><div class="line number24 index23 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">String\[\] headers() </code><code class="java keyword">default</code> <code class="java plain">{};</code></div><div class="line number25 index24 alt2">&nbsp;</div><div class="line number26 index25 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">String\[\] consumes() </code><code class="java keyword">default</code> <code class="java plain">{};</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java plain">String\[\] produces() </code><code class="java keyword">default</code> <code class="java plain">{};</code></div><div class="line number29 index28 alt2"><code class="java plain">}</code></div></div></td></tr></tbody></table></div></div> </div> <p>RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。</p> <p><strong>RequestMapping注解有六个属性。</strong></p> <p>1、value, method;<br> </p> <p>value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);<br> </p> <p>method: 指定请求的method类型, GET、POST、PUT、DELETE等;</p> <p>2、consumes,produces;<br> </p> <p>consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;<br> </p> <p>produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;</p> <p>3、params,headers;<br> </p> <p>params: 指定request中必须包含某些参数值是,才让该方法处理。<br> </p> <p>headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。<br> </p> <p>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。</p> <div class="clearfix"> <span id="art\_bot" class="jbTestPos"></span> </div> </div> </div>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap