<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<String> 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<String>(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"> </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"> </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"> </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"> </div><div class="line number18 index17 alt1"><code class="java spaces"> </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"> </div><div class="line number20 index19 alt1"><code class="java spaces"> </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"> </div><div class="line number22 index21 alt1"><code class="java spaces"> </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"> </div><div class="line number24 index23 alt1"><code class="java spaces"> </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"> </div><div class="line number26 index25 alt1"><code class="java spaces"> </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"> </div><div class="line number28 index27 alt1"><code class="java spaces"> </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>