Spring JPA Custom Query返回JSON

时间:2016-01-11 06:09:18

标签: java spring hibernate jpa

我使用Spring hibernate和JPA Repository将值作为JSON返回。它适用于所有默认情况。我在CrudRepository中遇到自定义查询问题,将聚合值作为JSON返回。

CrudRepository

@Repository
public interface ExpenseRepository extends CrudRepository<Expense, Integer>{
    @Query("SELECT min(dtDate) as dtDate ,Max(dtDate) as dtDate FROM Expense")
    Iterable<Expense> getAvlRptDates();
}

注意:我已尝试使用和不使用Alias,List等。

控制器

@ResponseBody
@RequestMapping(value="/getAvlExpMonthYear",method=RequestMethod.GET)
public Iterable<Expense> getAvlRptDates(){
    //String test = testRepo.findAll().toString();
    return expRepo.getAvlRptDates();
}

我也尝试过List。我知道使用自定义代码或其他dto类转换为JSON。

如果没有为两个字段创建额外的域类或dto类,请告诉我。

1 个答案:

答案 0 :(得分:0)

更改此:

@Repository
public interface ExpenseRepository extends CrudRepository<Expense, Integer>{
    @Query("SELECT min(dtDate) as dtDate ,Max(dtDate) as dtDate FROM Expense")
    Iterable<Expense> getAvlRptDates();
}

对于以下内容,将Iterable更改为Optional,以返回Jsons列表:

@Repository
public interface ExpenseRepository extends CrudRepository<Expense, Integer>{
    @Query("SELECT min(dtDate) as dtDate ,Max(dtDate) as dtDate FROM Expense")
    Optional<Expense> getAvlRptDates();
}

现在,您将获得某种JSON,但不会获得符合官方标准的JSON。

所以我的建议是:

@Repository
public interface ExpenseRepository extends CrudRepository<Expense, Integer>{
    @Query("SELECT min(dtDate) as dtDate ,Max(dtDate) as dtDate FROM Expense")
    Expense[] getAvlRptDates();
}

在返回单个iterable的地方,然后将iterable的内容一一转换为json。参见下面的链接:

How to convert list data into json in java

希望有帮助。