Я хотел бы получить ответ JSON с некоторыми аннотациями.Например, теперь мой ответ в json выглядит следующим образом:
{
"id": 1,
"startDate": [
1993,
12,
12
],
"endDate": [
2018,
11,
22
],
"totalDistance": 255,
"totalPrice": 211
}
Но я хочу получить выбранные данные из моей модели и добавить к ним аннотации, например, единицы измерения или изменить формат типа даты.Это то, что я хочу получить в качестве ответа json:
{
"startDate": "December, 12th",
"totalDistance": "255 km",
"totalPrice": "211 Euros",
}
Это часть моего ApiController:
@RequestMapping(path = "/api/reports/daily", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = "application/json")
public Reports getDailyReport1(@RequestParam("start_date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate , @RequestParam("end_date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {
Reports reports = new Reports();
reports.setStartDate(startDate);
reports.setEndDate(endDate);
reportsService.calculateTotalDistance(reports);
reportsService.calculateTotalPrice(reports);
return reports;
}
@GetMapping(value = "/api/reports/{id}", produces = "application/json")
public Optional<Reports> getReportsFromId(@PathVariable Long id){
return reportsService.getReport(id);
}
@GetMapping("/api/reports")
public Collection<Reports> getAllReports(){
return reportsService.findAllReports();
}
Служба:
@Service
public class ReportsService {
@Autowired
TransitService transitService;
@Autowired
ReportsRepository reportsRepository;
public void addReports(Reports reports) {
reportsRepository.save(reports);
}
public void calculateTotalDistance(Reports reports) {
double totalDistance = 0.0;
List<Transit> transits = transitService.getTransits(reports.getStartDate(), reports.getEndDate());
for (Transit transit : transits) {
if (transit.getDistance() != null) {
totalDistance = totalDistance + transit.getDistance();
}
}
reports.setTotalDistance((long) totalDistance);
}
public void calculateTotalPrice(Reports reports) {
double totalPrice = 0.0;
List<Transit> transits = transitService.getTransits(reports.getStartDate(), reports.getEndDate());
for (Transit transit : transits) {
if (transit.getPrice() != null) {
totalPrice = totalPrice + transit.getPrice();
}
}
reports.setTotalPrice((long) totalPrice);
}
public void addReports1(Reports reports) {
reportsRepository.save(reports);
}
public List<Reports> findAllReports() {
Iterable<Reports> all = reportsRepository.findAll();
List<Reports> reports = convertReportsToList(all);
return reports;
}
private List<Reports> convertReportsToList(Iterable<Reports> all) {
List<Reports> reports = new ArrayList<>();
for (Reports report : all) {
reports.add(report);
}
return reports;
}
public Optional<Reports> getReport(Long id){
return reportsRepository.findById(id);
}
}
Когда яизмените @RequestMapping (путь = "/ api / reports / daily") на:
@RequestMapping(path = "/api/reports/daily", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = "application/json")
public String getDailyReport1(@RequestParam("start_date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate , @RequestParam("end_date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {
Reports reports = new Reports();
reports.setStartDate(startDate);
reports.setEndDate(endDate);
reportsService.calculateTotalDistance(reports);
reportsService.calculateTotalPrice(reports);
return "Total price" + reports.getTotalPrice + "Euros" + "Total distance" + reports.getTotalDistance + "km";
Я получаю ответ от JSON.Должен ли J создать шаблон ответа json и вернуть его сюда, чтобы получить информацию, которую я хочу, с аннотациями, такими как единицы измерения и т. Д. ??Спасибо за ваше время.Надеюсь, вы понимаете, что у меня на уме.