Имена атрибутов сущности JPA отсутствуют в сгенерированном JSON
Я использую JPA и Джексон используется для генерации JSON
Emp.java
@Entity
@NamedQuery(name = "Emp.findAll",
query = "select o.empNo, o.empName from Emp o ")
@Table(name = "EMP")
public class Emp implements Serializable {
@Column(name = "ename")
private String empName;
@Id
@Column(name = "empno", nullable = false)
private String empNo;
.....
В классе обслуживания у меня есть следующий код
@GET
@Path("/emplist")
@Produces(MediaType.APPLICATION_JSON)
public Object getEmployees() {
List<Emp> list = this.findAll();
ObjectMapper objectMapper = new ObjectMapper();
empAsJson = objectMapper.writeValueAsString(list);
public List<Emp> findAll() {
return getEntityManager().createNamedQuery("Emp.findAll").getResultList();
}
Проблема сгенерирована JSON не имеет имен атрибутов, например
["2390","JAMES"],
Принимая во внимание, что если я изменю namedQuery в классе Emp на
select o from Emp o
затем сгенерированный JSON имеет имена атрибутов, как показано ниже
[{"empNo":"2390","empName":"JAMES"},
В чем может быть причина этого и как я могу решить эту проблему?
3 ответа
NAmed Query select o.empNo, o.empName from Emp o
будут return List<Object[]>
в то время как select o from Emp o
будут return List<Emp>
соответственно json
будет произведено.
Вы можете изменить запрос, как показано ниже
select new Emp(o.empNo, o.empName) from Emp o
и иметь конструктор в вашем классе соответственно.
или попробуйте использовать
select new Map(o.empNo as empNo , o.empName as empName) from Emp o
Разница в том, что в запросе select o.empNo, o.empName from Emp o
Вы выбираете конкретные поля сущностей, и каждая строка результата является Object[]
, Таким образом, этот массив указанных свойств.
Второй запрос select o from Emp o
выбирает всю сущность со всеми ее полями, и то, что вы видите, является сущностью в формате JSON.
В первом случае ваш JPQL возвращает List<Object[]>
; каждый элемент в списке представляет собой массив, содержащий значения o.empNo
а также o.empName
, Конечно, когда создается JSON, он создается как массив / список элементов.
Во втором случае вы получите List<Employee>
каждый элемент которого является Employee
экземпляр, поэтому он сериализуется, как объект (список значений атрибутов).