java的bean对象里面有一个其他对象,通过@JsonSerialize注解序列化,请给出java代码
时间: 2024-02-01 21:14:30 浏览: 59
假设我们有以下两个Java类:
```java
public class Person {
private String name;
private int age;
private Address address;
// 构造函数、Getter和Setter方法省略
}
public class Address {
private String city;
private String street;
// 构造函数、Getter和Setter方法省略
}
```
我们想要将一个Person对象序列化为JSON格式,需要在Person类上添加@JsonSerialize注解:
```java
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@JsonSerialize(using = PersonSerializer.class)
public class Person {
private String name;
private int age;
private Address address;
// 构造函数、Getter和Setter方法省略
}
```
其中,using属性指定了使用的自定义序列化器类PersonSerializer。
接下来,我们需要创建一个自定义序列化器类PersonSerializer:
```java
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class PersonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person person, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("name", person.getName());
jsonGenerator.writeNumberField("age", person.getAge());
Address address = person.getAddress();
if (address != null) {
jsonGenerator.writeObjectFieldStart("address");
jsonGenerator.writeStringField("city", address.getCity());
jsonGenerator.writeStringField("street", address.getStreet());
jsonGenerator.writeEndObject();
}
jsonGenerator.writeEndObject();
}
}
```
在自定义序列化器类中,我们需要实现JsonSerializer抽象类的serialize方法,该方法中通过JsonGenerator对象将Java对象序列化为JSON格式。
注意,我们在Person类中嵌套了一个Address对象,因此在自定义序列化器中需要对Address对象进行特殊处理。
最后,我们可以通过以下代码将Person对象序列化为JSON格式:
```java
ObjectMapper objectMapper = new ObjectMapper();
Person person = new Person("张三", 20, new Address("北京", "朝阳区"));
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
```
输出结果如下:
```json
{
"name": "张三",
"age": 20,
"address": {
"city": "北京",
"street": "朝阳区"
}
}
```
阅读全文