Параметр не задан в собственном запросе JPA при весенней загрузке - PullRequest
0 голосов
/ 29 апреля 2020

Я разрабатываю бэкэнд в Spring Boot, я использую JPA для всех операций с БД. Проблема заключается в следующем:

я получаю параметр с именем «respableServicio» из внешнего интерфейса, сначала он попадает в метод контроллера, где я проверял, что параметр туда попадает правильно. Тем не менее, когда параметр переходит от контроллера к хранилищу, значение не получается правильно, оно кажется пустым, потому что мой запрос должен вернуть 1 запись и возвращает 0 записей.

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

Я следовал некоторым примерам, но пока не работает. Что я делаю неправильно? Заранее спасибо

Контроллер Formulario

@PostMapping(path = "/getCountAnexos")
    @ResponseBody
    public String countAnexosRechazo(@RequestBody String responsableServicio) {
        Map<String, Object> json = new HashMap<String, Object>();
        // Cambiar a nativeQuery

        System.out.println("*******************************************");
        System.out.println("*******************************************");
        System.out.println(responsableServicio);
        System.out.println("*******************************************");
        System.out.println("*******************************************");
        String respuesta = formularioRepository.getAnexosRechazados(responsableServicio);
        System.out.printf("RESPUESTA",respuesta);

        return respuesta;
}

Хранилище Formulario

// Consulta para obtener el numero de Anexos Rechazados de acuerdo el Usuario
    @Query(value = "SELECT COUNT(*) FROM formulario where year(fechaTramite)='2020' and responsableServicio = :responsableServicio and (estatusGestorContratos = 'Rechazado' or estatusAFTI = 'Rechazado')", nativeQuery = true)
    public abstract String getAnexosRechazados(@Param("responsableServicio") String responsableServicio);

Что я получаю с консоли

img

1 Ответ

0 голосов
/ 29 апреля 2020

Проблема в классе контроллера. Он принимает строку как полную JSON в скобках. Здесь вы взяли @PostMapping и использовали @RequestBody String responseableServicio в качестве параметра метода. Вы не можете принимать String в качестве параметра типа, вы должны создать класс, имеющий String responseableServicio в качестве переменной со своими getters / setters. Затем в контроллере примите аргумент в качестве параметра класса.

class RequestDTO{
    String responsableServicio;
    public String getResponsableServicio() {
        return responsableServicio;
    }
    public void setResponsableServicio(String responsableServicio) {
        this.responsableServicio = responsableServicio;
    }
} 

Запишите контроллер как

@PostMapping(path = "/getCountAnexos")
@ResponseBody
public String countAnexosRechazo(@RequestBody RequestDTO responsableServicio) {
    Map<String, Object> json = new HashMap<String, Object>();
    // Cambiar a nativeQuery

    System.out.println("*******************************************");
    System.out.println("*******************************************");
    System.out.println(responsableServicio.getResponsableServicio());
    System.out.println("*******************************************");
    System.out.println("*******************************************");
    String respuesta = formularioRepository.getAnexosRechazados(responsableServicio.getResponsableServicio());
    System.out.printf("RESPUESTA",respuesta);

    return respuesta;
}

Это будет работать нормально .. !!

Если это тоже не работает затем 1) Убедитесь, что значение @Query, которое вы импортировали, должно быть из org.springframework.data.jpa.repository.Query

2) Убедитесь, что интерфейс репозитория имеет аннотацию @Repository.

3) Убедитесь, что @Param импортирован из org.springframework.data.repository.query.Param

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...