2013-07-26 2 views
1

У меня есть простой класс отдыха JEE6, который получает данные из db2. Я использую Jackson в классе ApplicationConfig для преобразования объектов сущности в json. Он преобразует имена полей в качестве ключа и значение в качестве значения правой руки. Так, например:javaee 6 rest api named query result

Class Entity { 
String name; 
String address; 
} 

превращается в

{name:"hello", address:"world"} 

Услуга заключается в следующем:

public List<T> findAll() { 
     javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); 
     cq.select(cq.from(entityClass)); 
     return getEntityManager().createQuery(cq).getResultList(); 
    } 

Теперь я хочу вернуть только имя в формате JSON. Так что я создал именованный запрос следующим образом в классе сущностей:

@NamedQuery(name = "justGetName", query = "SELECT a.name FROM Applications a") 

И сервис изменен

public List<T> findAll() { 
      return getEntityManager().createNamedQuery("justGetName").getResultList(); 
     } 

Это возвращает следующий массив:

[{"first","second","third"}] 

Но я хочу, чтобы получить назад:

[{name:"first",name:"second",name:"third"}] 

Как написать именованный запрос, чтобы имена полей классов были добавлены в структуру json? Спасибо.

ответ

0

Вы запрашиваете список строк из своей базы данных, и это то, что возвращает служба.

Их несколько способов достижения вашей цели.

Pure JPA

  1. Использование @JsonIgnore сказать Джексон не сериализовать атрибут

    class Application { 
        String name; 
        @JsonIgnore 
        String address; 
    } 
    
  2. Создать новый класс сущностей, который содержит только те атрибуты, которые вы хотели бы поделиться

    class ApplicationName { 
        String name; 
    } 
    

В качестве альтернативы вы можете ввести отдельный класс, который содержит только те атрибуты, которые вы хотели бы разделить, и преобразовать результаты запроса в этот класс и вернуться, чем список этих преобразованных значений.