一个JSON格式字符串输出案例实现的基础:
创建一个实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//需要导入lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private String sex;
}
Cotronller 配备其相应注解实现
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import pojo.User;
@Controller
public class controller {
@RequestMapping("/json1")
@ResponseBody//主要作用是将解析依赖所解析的字符串转换为json格式,注解的使用十分便利
public String json1() throws JsonProcessingException {
//既然导入了jackson json解析依赖 创建一个对象映射器 用来实现解析目的
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User("鱿鱼片", 3, "男");
//将我们的对象解析成为json格式,为什么使用String来定义一个字符串对象 因为json实质为一个字符串
String str = mapper.writeValueAsString(user);
//由于@ResponseBody注解,这里会将str转成json格式返回;十分方便(注意)
return str;
}
}
maven依赖导入
<dependency>
<groupId>org.projectlombok</groupId><!--获取对象 注解依赖-->
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
<!--JSON解析工具依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2.2</version>
</dependency>
运行之后出现乱码:
解决途径:
发现出现了乱码问题,我们需要设置一下他的编码格式为utf-8,以及它返回的类型;
通过@RequestMaping的produces属性来实现(不同于之前所使用的方式 查看@RequestMapping的源码可知有很多属性),修改下代码:
//produces:指定响应体返回类型和编码
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
代码优化 逐步偏向项目开发:
以上的解决方法是 在@RequestMapping中配置字符编码方式,但是一个controller里不止一个请求,可以通过spring配置统一解决.
添加一段消息StringHttpMessageConverter转换配置!
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
在上文,需要返回json字符串利用的是注解@ResponseBody
这也涉及到每一个请求也要配上注解@ResponseBody 略显麻烦,在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串了,在前后端分离开发中,一般都使用 @RestController很便捷。当然每一个controller类是有不同的作用的这个,如果以下全是需要返回json字符串:
@RestController//改用RestController 以下就不用 @ResponseBody//主要作用是将解析依赖所解析的字符串转换为json格式,注解的使用十分便利
public class controller {
@RequestMapping(value="/json1")//解决浏览器输出乱码问题-spring配置解决
public String json1() throws JsonProcessingException {
//既然导入了jackson json解析依赖 创建一个对象映射器 用来实现解析目的
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User("鱿鱼片", 3, "男");
//将我们的对象解析成为json格式,为什么使用String来定义一个字符串对象 因为json实质为一个字符串
String str = mapper.writeValueAsString(user);
//由于@ResponseBody注解,这里会将str转成json格式返回;十分方便(注意)
return str;
}
}
本文介绍了如何在SpringMVC中处理JSON格式字符串的输出,从基础实现到出现乱码问题的解决,以及代码的逐步优化。通过设置@RequestMaping的produces属性解决乱码,然后探讨如何通过Spring配置统一处理字符编码。最后提出使用@RestController注解简化控制器中返回JSON的处理,适合前后端分离的开发模式。
1523

被折叠的 条评论
为什么被折叠?



