在 Spring 中将 pojo 转换为 JSON 的最佳方法是什么
What's the best way to convert pojo to JSON in Spring
我需要在 Spring 项目中将 POJO 转换为 JSON 字符串。我知道 Spring MVC 通过注释 @ResponseBody 为控制器中的 return json 提供了一种方便的方法,我想知道 Spring 如何在内部将 pojo 转换为 JSON?从 Spring MVC maven 依赖层次结构中,我找到了 jackson-databind 和 jackson-core 库。在阅读 Jackson 教程时,它说不同的库:
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
转换代码类似如下:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\user.json"), user);
我的问题是:
1:springrestfulcontroller如何将POJO转为JSON?通过使用杰克逊但不同的依赖库?
2:如果我使用上面的 Jackson 示例将 POJO 转换为 JSON,我是否必须将 json 写入文件?是否可以直接获取 JSON 字符串?
3: 在 Spring 项目中将 POJO 转换为 JSON 的最佳方法是什么 -- 不使用 @ResponseBody,因为我想将 POJO 转换为 JSON 并将其保存到数据库,@ResponseBody 用于 restful 服务,不适合我的情况。
非常感谢您提前的回答。
您应该在 pom.xml 文件中添加这样的代码
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
然后你可以return像这样反对你的控制器
@ResponseBody
public TheClassYouDefine method(){
return object;
}
jackson 会将对象转换为 json
回答您的问题:
1.spring restful 无法将 pojo 转换为 json,它使用 jackson 来执行此操作,并且您必须像上面的答案一样添加两个库。
2.you 不需要写 json 到任何文件,你可以在你的页面中得到 json 字符串,你可以使用 ajax 请求来获取它们。然后你可以使用 jquery 将它们放在页面的任何位置。
3.I 不知道 spring 有在 B/S application.So 中将 pojo 转换为 json 的机制 如果你能告诉我怎么做,那太好了感恩
如果您不想使用 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();
}
你必须像这样声明 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;
}
}
Spring 引导使用 Jackson 库转换 Java POJO 对象 to/from 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);
}
});
}
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public static String jsonToPojo(Object targetPojo) {
if(targetPojo == null)
return null;
ObjectMapper mapper = new ObjectMapper();
try {
mapper.enable(SerializationFeature.INDENT_OUTPUT);
return mapper.writeValueAsString(targetPojo);
} catch (IOException e) {
LOGGER.error("Error parsing string to json. Target pojo : {}", targetPojo.getClass().getName() );
}
return null;
}
我需要在 Spring 项目中将 POJO 转换为 JSON 字符串。我知道 Spring MVC 通过注释 @ResponseBody 为控制器中的 return json 提供了一种方便的方法,我想知道 Spring 如何在内部将 pojo 转换为 JSON?从 Spring MVC maven 依赖层次结构中,我找到了 jackson-databind 和 jackson-core 库。在阅读 Jackson 教程时,它说不同的库:
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
转换代码类似如下:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\user.json"), user);
我的问题是:
1:springrestfulcontroller如何将POJO转为JSON?通过使用杰克逊但不同的依赖库?
2:如果我使用上面的 Jackson 示例将 POJO 转换为 JSON,我是否必须将 json 写入文件?是否可以直接获取 JSON 字符串?
3: 在 Spring 项目中将 POJO 转换为 JSON 的最佳方法是什么 -- 不使用 @ResponseBody,因为我想将 POJO 转换为 JSON 并将其保存到数据库,@ResponseBody 用于 restful 服务,不适合我的情况。
非常感谢您提前的回答。
您应该在 pom.xml 文件中添加这样的代码
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
然后你可以return像这样反对你的控制器
@ResponseBody
public TheClassYouDefine method(){
return object;
}
jackson 会将对象转换为 json
回答您的问题: 1.spring restful 无法将 pojo 转换为 json,它使用 jackson 来执行此操作,并且您必须像上面的答案一样添加两个库。 2.you 不需要写 json 到任何文件,你可以在你的页面中得到 json 字符串,你可以使用 ajax 请求来获取它们。然后你可以使用 jquery 将它们放在页面的任何位置。 3.I 不知道 spring 有在 B/S application.So 中将 pojo 转换为 json 的机制 如果你能告诉我怎么做,那太好了感恩
如果您不想使用 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();
}
你必须像这样声明 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;
}
}
Spring 引导使用 Jackson 库转换 Java POJO 对象 to/from 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);
}
});
}
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public static String jsonToPojo(Object targetPojo) {
if(targetPojo == null)
return null;
ObjectMapper mapper = new ObjectMapper();
try {
mapper.enable(SerializationFeature.INDENT_OUTPUT);
return mapper.writeValueAsString(targetPojo);
} catch (IOException e) {
LOGGER.error("Error parsing string to json. Target pojo : {}", targetPojo.getClass().getName() );
}
return null;
}