Jackson ObjectMapper解析

<pre name="code" class="java">/**
*   Jackson ObjectMapper类
*/
//ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。
//以下是org.codehaus.jackson.map.ObjectMapper类的声明:

public class ObjectMapper
   extends ObjectCodec
      implements Versioned
// 演示实例:
 import java.io.IOException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class JacksonTester {
   public static void main(String args[]){
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";

      //map json to student
      try {
         Student student = mapper.readValue(jsonString, Student.class);
         System.out.println(student);
         mapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);
         //把对象转成json string类型的
         jsonString = mapper.writeValueAsString(student);
         System.out.println(jsonString);

      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

class Student {
   private String name;
   private int age;
   public Student(){}
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String toString(){
      return "Student [ name: "+name+", age: "+ age+ " ]";
   }    
}

//输出结果
Student [ name: Mahesh, age: 21 ]
{
  "name" : "Mahesh",
  "age" : 21
}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果ObjectMapper在处理Duration时出现问题,有一些可能的解决方案可以尝试: 1. 添加Java Time模块的依赖。如我之前所说,添加以下依赖到你的Maven项目中: ```xml <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.9.8</version> </dependency> ``` 2. 注册Java Time模块。确保在创建ObjectMapper对象时,已经注册了Java Time模块: ```java ObjectMapper mapper = new ObjectMapper() .registerModule(new JavaTimeModule()); ``` 3. 标记Duration字段。如果你的类中有一个Duration类型的字段,需要使用@JsonSerialize和@JsonDeserialize注解标记它,以便ObjectMapper可以正确地序列化和反序列化它: ```java public class MyClass { @JsonSerialize(using = DurationSerializer.class) @JsonDeserialize(using = DurationDeserializer.class) private Duration duration; // getters and setters } ``` 4. 自定义序列化和反序列化器。如果以上方法都没有解决问题,你可以尝试自定义Duration类型的序列化和反序列化器,以确保ObjectMapper可以正确处理它们。你可以实现JsonSerializer和JsonDeserializer接口,来自定义序列化和反序列化Duration类型的逻辑。例如: ```java public class DurationSerializer extends JsonSerializer<Duration> { @Override public void serialize(Duration value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.toString()); } } public class DurationDeserializer extends JsonDeserializer<Duration> { @Override public Duration deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { return Duration.parse(p.getText()); } } ``` 然后,你需要在类中使用@JsonSerialize和@JsonDeserialize注解,来指定使用你的自定义序列化和反序列化器: ```java public class MyClass { @JsonSerialize(using = DurationSerializer.class) @JsonDeserialize(using = DurationDeserializer.class) private Duration duration; // getters and setters } ``` 以上是一些常见的解决方案,你可以根据具体的情况选择适合你的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值