首页 文章

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

提问于
浏览
4

我需要在Spring项目中将POJO转换为JSON字符串 . 我知道Spring MVC提供了一种方便的方法来通过注释@ResponseBody在控制器中返回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:spring restful controller如何将POJO转换为JSON?通过使用 Jackson 但不同的依赖库?

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

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

非常感谢你提前回答 .

4 回答

  • 0

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

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

    避免使用operator new reuse the ObjectMapper already available in Spring application context using dependency injection annotation @Autowired 创建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);
                }
            });
    }
    
  • -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

  • -2

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

相关问题