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

发布时间 - 2026-01-11 00:19:10    点击率:

在使用springMVC框架构建web应用,客户端常会请求字符串、整型、json等格式的数据,通常使用@ResponseBody注解使 controller回应相应的数据而不是去渲染某个页面。如果请求的是非英文格式的字符串,往往在客户端显示的是乱码。原因是spring的 StringHttpMessageConverter默认的字符类型是iso8895-1 ‘西欧语言’,中文等字符需要单独指定。

这里总结几种解决方案:

1.不使用@ResponseBody注解,使用HttpServeletResponse设置contentType属性

@RequestMapping(value ="/rest/create/document") 
public void create(Document document, HttpServletRespone respone) { 
repoonse.setContentType("text/plain;charset='utf-8'"); 
response.write("中文string"); 
}

2.返回Response Entity object,设置contentType,例:

@RequestMapping(value = "/rest/create/document") public ResponseEntity<String> create(Document document, HttpServletRespone respone) { 
HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.add("Content-Type", "text/html; charset=utf-8"); 
Document newDocument = DocumentService.create(Document); 
String json = jsonSerializer.serialize(newDocument); 
return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK); 
}

3.使用produces属性:

@RequestMapping(value = "/rest/create/document",produces= "text/plain;charset=UTF-8") //返回的内容类型
@ResponseBody 
public String create(Document document, HttpServletRespone respone) throws UnsupportedEncodingException { 
Document newDocument = DocumentService.create(Document); 
return jsonSerializer.serialize(newDocument); 
}

@RequestMapping

参数绑定(@RequestParam、 @RequestBody、 @RequestHeader 、 @PathVariable)

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
  String name() default "";

  String[] value() default {};

  RequestMethod[] method() default {};

  String[] params() default {};

  String[] headers() default {};

  String[] consumes() default {};

  String[] produces() default {};
}

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

RequestMapping注解有六个属性。

1、value, method;

value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method: 指定请求的method类型, GET、POST、PUT、DELETE等;

2、consumes,produces;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、params,headers;

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring mvc 字符编码  # springmvc controller  # springmvc 编码  # 的是  # 客户端  # 都是  # 西欧  # 是一个  # 将会  # 英文  # 能让  # 几种  # 绑定  # 大家多多  # 才让  # 类中  # 而不是  # 为父  # 整型  # 以该  # 可用于  # void  # plain 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 百度浏览器如何管理插件 百度浏览器插件管理方法  javascript基本数据类型及类型检测常用方法小结  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  如何快速上传建站程序避免常见错误?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何快速搭建FTP站点实现文件共享?  如何做网站制作流程,*游戏网站怎么搭建?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何在云指建站中生成FTP站点?  如何用IIS7快速搭建并优化网站站点?  Laravel Fortify是什么,和Jetstream有什么关系  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Android滚轮选择时间控件使用详解  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  详解CentOS6.5 安装 MySQL5.1.71的方法  如何快速生成高效建站系统源代码?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  javascript基于原型链的继承及call和apply函数用法分析  Laravel怎么使用artisan命令缓存配置和视图  Java解压缩zip - 解压缩多个文件或文件夹实例  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel怎么实现模型属性的自动加密  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  零基础网站服务器架设实战:轻量应用与域名解析配置指南  微信小程序 scroll-view组件实现列表页实例代码  如何生成腾讯云建站专用兑换码?  如何在企业微信快速生成手机电脑官网?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  高端建站如何打造兼具美学与转化的品牌官网?  Linux系统命令中tree命令详解  网站建设要注意的标准 促进网站用户好感度!  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Python结构化数据采集_字段抽取解析【教程】  原生JS实现图片轮播切换效果  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  bootstrap日历插件datetimepicker使用方法  Swift中swift中的switch 语句  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】