mai*_*365 5 spring json pojo jackson
我需要在Spring项目中将POJO转换为JSON字符串.我知道Spring MVC提供了一种方便的方法来通过注释@ResponseBody在控制器中返回json,我想知道Spring如何在内部将pojo转换为JSON?从Spring MVC maven依赖的层次结构中,我找到了jackson-databind和jackson-core库.在阅读杰克逊教程时,它说不同的库:
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
转换代码如下:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\\user.json"), user);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
1:spring restful controller如何将POJO转换为JSON?通过使用杰克逊但不同的依赖库?
2:如果我使用上面的Jackson示例将POJO转换为JSON,我是否必须将json写入文件?是否可以直接获取JSON字符串?
3:在Spring项目中将POJO转换为JSON的最佳方法是什么 - 不使用@ResponseBody,因为我想将POJO转换为JSON并将其保存到数据库,@ ResponseBody用于提供宁静的服务,不适合我的情况.
非常感谢你提前回答.
小智 6
Spring Boot 使用 Jackson 库将 Java POJO 对象与 Json 相互转换。这些转换器是为 Rest 服务自动创建和使用的,用于将 Rest 方法返回的 POJO 对象转换为 Json(例如用 @ResponseBody 注释的 Rest 服务方法)。如果使用 Rest 服务,则 Spring 会自动创建 POJO/Json 转换器。如果你想在一些不同的情况下进行 POJO/Json 转换,你需要 com.fasterxml.jackson.databind.ObjectMapper。
避免通过 operator new 创建 ObjectMapper 实例,使用依赖注入注解 @Autowired 重用 Spring 应用程序上下文中已经可用的 ObjectMapper。Spring 会自动为您的 objectMapper 变量注入值。
public class clA {
@Autowired
private ObjectMapper objectMapper;
public Optional<String> objToJson(MyObj obj) {
try {
String objJackson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj));
} catch (JsonProcessingException e) {
log.debug("failed conversion: Pfra object to Json", e);
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您不想使用 Spring MVC 将对象转换为 JSON 字符串,您可以这样做:
private JsonGenerator jsonGenerator = null;
private ObjectMapper objectMapper = null;
public void init(){
objectMapper = new ObjectMapper();
try{
jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);
jsonGenerator.writeObject(bean);
objectMapper.writeValue(System.out, bean);
}catch (IOException e) {
e.printStackTrace();
}
jsonGenerator.flush();
jsonGenerator.close();
}
Run Code Online (Sandbox Code Playgroud)
你必须像这样声明bean
public class AccountBean {
private int id;
private String name;
private String email;
private String address;
private Birthday birthday;
//getters, setters
@Override
public String toString() {
return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13132 次 |
| 最近记录: |