我有一个 Quarkus 项目,其中包含一个用于存储地址详细信息的 JSON 类型列的用户实体。此列中的数据当前在 API 响应中作为字符串返回,而不是 JSON 对象。我想正确地将这些数据反序列化为 JSON 对象。以下是相关代码和设置:
实体:
java
package org.acme;
import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
import jakarta.persistence.*;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import java.util.Map;
@Table(name = "user_test")
@Entity
public class User extends PanacheEntityBase {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer userId;
@Column(name = "name")
public String name;
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "address", columnDefinition = "json")
public Map<String, String> address;
}
服务:
java
package org.acme;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import java.util.List;
@ApplicationScoped
public class UserService {
@Inject
EntityManager em;
public List<Object[]> getUser() {
String sql = "SELECT * FROM user_test";
Query q = em.createNativeQuery(sql);
return q.getResultList();
}
}
控制器:
java
package org.acme;
import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
@Path("/api")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class GreetingResource {
@Inject
UserService userService;
@POST
@Path("/usr")
public Object getUsers() {
return userService.getUser();
}
}
API 响应(localhost:8080/api/usr):
json
[
[
2,
"{\"zip\": \"98765\", \"city\": \"Springfield\", \"street\": \"1234 Oak St\"}",
"John Doe"
]
]
地址字段作为 JSON 编码字符串返回,但我希望它是一个正确的 JSON 对象。
如何修改我的设置,以便将地址字段正确反序列化为 API 响应中的 JSON 对象?
只需将地址对象映射为 Address Pojo 而不是 Map。