什么是在Spring中将pojo转换为JSON的最佳方法

时间:2015-08-27 02:16:38

标签: json spring jackson pojo

我需要在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>

转换代码如下所示:

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\\user.json"), user);

我的问题是:

1:spring restful controller如何将POJO转换为JSON?通过使用杰克逊但不同的依赖库?

2:如果我使用上面的Jackson示例将POJO转换为JSON,我是否必须将json写入文件?是否可以直接获取JSON字符串?

3:在Spring项目中将POJO转换为JSON的最佳方法是什么 - 不使用@ResponseBody,因为我想将POJO转换为JSON并将其保存到数据库,@ ResponseBody是为了提供宁静的服务,而不是适合我的情况。

非常感谢您提前回答。

5 个答案:

答案 0 :(得分:4)

如果您不想使用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;
    }
}

答案 1 :(得分:1)

Spring Boot使用Jackson库将Java POJO Object与Json进行转换。这些转换器将被创建并自动用于Rest服务,以将Rest方法返回的POJO对象转换为Json(例如,以@ResponseBody注释的Rest服务方法)。如果使用Rest服务,那么Spring将自动创建POJO / Json转换器。 如果要在不同情况下进行POJO / Json转换,则需要com.fasterxml.jackson.databind.ObjectMapper。

避免由新的操作员创建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);
            }
        });
}

答案 2 :(得分:0)

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;
}

答案 3 :(得分:-1)

您应该在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>

那么你可以像你这样在你的控制器上返回对象

@ResponseBody
public TheClassYouDefine method(){

  return object;
}

jackson会将对象转换为json

答案 4 :(得分:-2)

回答你的问题: 1.spring restful无法将pojo转换为json,它使用jackson来执行此操作,并且必须像上面的答案一样添加两个lib。 2.你不需要将json写入任何文件,你可以在你的页面中获得json字符串,你可以使用ajax请求获取它们。然后你可以使用jquery将它们放在你页面的任何地方。 3.我不知道弹簧是否有在B / S应用程序中将pojo转换为json的机制。所以,如果你能告诉我怎么做,那就非常感谢