ssm框架使用@ResponseBody注解返回json中文乱码以及用ajax请求后台数据报415问题总结

最近做项目的过程中,在与web端进行数据交互时遇到了两个问题,一是在ssm框架中使用@ResponseBody注解返回json数据时中文发生了乱码、二是用ajax请求后台数据时报415的错,在此总结记录一下。

1、解决使用@ResponseBody注解返回json数据时中文发生乱码问题

  • 解决方法一:

@RequestMapping注解中加上(produces = "application/json;charset=utf-8")

例如下面的代码片段:

这种解决方法需要在每个使用@ResponseBody注解返回json数据的方法上都加上图圈中的代码,比较麻烦,还有解决方法二

  • 解决方法二:

在spring-mvc.xml中添加如下配置:

        <!-- 处理请求返回json字符串的中文乱码问题 -->
	<mvc:annotation-driven>
		<mvc:message-converters>
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<property name="supportedMediaTypes">
					<list>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

附:

  • @RequestMapping注解的produces属性是用于指定该方法的响应类型:

        produces = "application/json":表示该方法将会返回json格式的数据

        produces = "application/xml":表示该方法将会返回xml格式的数据

        produces ="text/html":表示该方法将会返回string类型的数据

  • @RequestMapping注解的consumes属性是用于指定该方法的请求类型:

        consumes = "application/json" :表示服务器仅处理request Content-Type为“application/json”类型的请求

2、解决使用ajax请求后台数据报415问题

controller层的代码:

    /**
     * 新增用户
     * @author LiJun
     * @Date 2019/5/29
     * @Time 14:19
     * @param taUser
     * @return java.lang.String
     */
    @RequestMapping(value = "insert", method = {RequestMethod.POST}, produces = "application/json;charset=utf-8")
    @ResponseBody
    public JsonRespData insert(@RequestBody(required = false) TaUser taUser){
        taUser.setSubmitTime(new Date());
        taUser.setCreateTime(new Date());
        log.info("入参参数:{}", JSON.toJSONString(taUser));
        return taUserService.insertSelective(taUser);
    }

ajax请求的代码:

        var data = {
            id : 1,
            phone : "13000007777",
            sid : 13
        };
        
        $.ajax({
            url : "${path}/seller/insert",
            type : "post",
            data : JSON.stringify(data),
            success : function (data) {
                console.log(data);
            }
        });

然后会出现报错信息:

意思是服务器无法处理请求附带的媒体格式 (Unsupported Media Type)

出现415错误的原因总结:

1)原因可能是spring-mvc.xml中没有添加配置,注解;

2)pom.xml没有jackson包的引用;

3)Ajax请求时没有设置Content-Type为application/json;charset=utf-8;

4)发送请求内容没有发送json字符串,而是以json格式数据发送的

我这里是第三种情况引起的

解决方法:

1)检查springMVC配置文件中是否开启了注解:

2)maven引入jackson的包:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.7.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.7.0</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

3)设置ContentType为application/json;charset=utf-8:

4)将发送数据的格式弄成字符串:

附:

@RequestBody注解是后台用于接收前台传来的json格式的数据

但是,我们在传输json数据的时候,假如json数据为空,那么就会报一个错误,就是Required request body is missing这个的意思就是我们这个接口必须要传输json格式的数据,假如没有数据,就会报错返回错误的信息

假如不想让系统报错,那么就需要在@RequestBody增加一个Required属性了,并且把该属性设置为false

参考:

https://blog.csdn.net/qianyiyiding/article/details/51615961

发布了102 篇原创文章 · 获赞 64 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42687829/article/details/92990382