Spring Boot: тип не может быть нулевым; вложенное исключение: java .lang.IllegalArgumentException: тип не может быть пустым при запуске хранимой процедуры - PullRequest
0 голосов
/ 18 февраля 2020

Доброе утро, я новичок в Spring Boot и выполняю службу отдыха, которая должна вызвать процедуру, хранящуюся в базе данных, вопрос в том, что вы получаете мобильный телефон и должны вернуть код и результат, как показано ниже:

enter image description here

Это мой код:

Основной класс

package com.app.validacion;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

Контроллер

package com.app.validacion.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


import com.app.validacion.dao.DriverBonificadosRepository;
import com.app.validacion.entity.RespuestaVo;

@RestController
public class DriverBonificadosController {

    @Autowired
    private DriverBonificadosRepository dao;

    @GetMapping("/service/{movil}")
    public RespuestaVo  ConsultarMovil(@PathVariable String movil) {
        return dao.validarClienteBonifiado(movil);

    }
}

Репозиторий

package com.app.validacion.dao;

import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.data.repository.CrudRepository;

import com.app.validacion.entity.DriverBonificados;
import com.app.validacion.entity.RespuestaVo;

public interface DriverBonificadosRepository extends CrudRepository<DriverBonificados, Integer> {

    @Procedure(procedureName="ValidacionClienteBonificado")
    RespuestaVo validarClienteBonifiado(String pMovil);
}

Моя сущность

import javax.persistence.NamedStoredProcedureQueries;
import javax.persistence.NamedStoredProcedureQuery;
import javax.persistence.ParameterMode;
import javax.persistence.StoredProcedureParameter;
import javax.persistence.Table;


@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(
            name="SPValidationClienteBonus4G",
            procedureName="ValidacionClienteBonificado",
            parameters = {
                    @StoredProcedureParameter(mode=ParameterMode.IN, name="p_movil",type=String.class), 
                    @StoredProcedureParameter(mode=ParameterMode.OUT, name="code",type=String.class),
                    @StoredProcedureParameter(mode=ParameterMode.OUT, name="result",type=String.class),
            })

})

@Entity
@Table
public class DriverBonificados {

    @Id
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getMovil() {
        return movil;
    }
    public void setMovil(String movil) {
        this.movil = movil;
    }
    public String getContador() {
        return contador;
    }
    public void setContador(String contador) {
        this.contador = contador;
    }
    public Date getFecha_driver() {
        return fecha_driver;
    }
    public void setFecha_driver(Date fecha_driver) {
        this.fecha_driver = fecha_driver;
    }
    public Date getFecha_alta() {
        return fecha_alta;
    }
    public void setFecha_alta(Date fecha_alta) {
        this.fecha_alta = fecha_alta;
    }
    public Date getFecha_fin() {
        return fecha_fin;
    }
    public void setFecha_fin(Date fecha_fin) {
        this.fecha_fin = fecha_fin;
    }
    public Date getCodigo_transaccion() {
        return codigo_transaccion;
    }
    public void setCodigo_transaccion(Date codigo_transaccion) {
        this.codigo_transaccion = codigo_transaccion;
    }
    private String movil;
    private String contador;
    private Date fecha_driver;
    private Date fecha_alta;
    private Date fecha_fin;
    private Date codigo_transaccion;

Мой класс RespuestaVo

package com.app.validacion.entity;

public class RespuestaVo {

    private String code;
    private String result;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }

}

И я получаю следующую ошибку (мобильный параметр должен быть получен как a Строка, поскольку в базе данных она находится как Varchar):

enter image description here

У кого-нибудь есть идеи, как решить эту проблему? Мне нужно проконсультироваться через Stored Procedue, если или если

ОБНОВЛЕНИЕ

Использование @Query и изменение кода следующим образом:

package com.app.validacion.dao;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import com.app.validacion.entity.DriverBonificados;
import com.app.validacion.entity.RespuestaVo;

public interface DriverBonificadosRepository extends CrudRepository<DriverBonificados, Integer> {

    @Query(nativeQuery = true,value = "call ValidacionClienteBonificado(:movil)")
    RespuestaVo validarClienteBonifiado(@Param("movil") String pMovil);
}

Я получаю следующая ошибка:

org.springframework.core.convert.ConverterNotFoundException: не найден конвертер, способный к конвертации из типа [org.springframework.data.jpa.repository.query.AbstractJpaQuery $ TupleConverter $ TupleBacked $ TupleBacked $ набрать [com.app.validacion.entity.RespuestaVo] в org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound (GenericConversionService. java: 321) ~ [spring-core-5.2.1.RELASE. 5.2.1.RELEASE] в org.springframework.core.convert.support.GenericConversionService.convert (GenericConversionService. java: 194) ~ [spring-core-5.2.1.RELEASE.jar: 5.2.1.RELEASE] в org.springframework.core.convert.support.GenericConversionService.convert (GenericConversionService. java: 174) ~ [spring-core-5.2.1.RELEASE.jar: 5.2.1.RELEASE] в org.springframework.data.repository .quer y.ResultProcessor $ ProjectingConverter.convert (ResultProcessor. java: 297) ~ [spring-data-commons-2.2.1.RELEASE.jar: 2.2.1.RELEASE] в org.springframework.data.repository.query.ResultProcessor $ ChainingConverter.lambda $ и $ 0 (ResultProcessor. java: 217) ~ [spring-data-commons-2.2.1.RELEASE.jar: 2.2.1.RELEASE] в org.springframework.data.repository.query.ResultProcessor $ ChainingConverter.convert (ResultProcessor. java: 228) ~ [spring-data-commons-2.2.1.RELEASE.jar: 2.2.1.RELEASE] в org.springframework.data.repository.query.ResultProcessor.processResult ( ResultProcessor. java: 170) ~ [spring-data-commons-2.2.1.RELEASE.jar: 2.2.1.RELEASE] в org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute (AbstractJpaQuery. java: 157) ~ [spring-data-jpa-2.2.1.RELEASE.jar: 2.2.1.RELEASE]

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

РЕШЕНО

Мне удалось решить мою проблему с помощью аннотации @Query и создать интерфейс для ответа, который я собирался получить, в этих случаях двумя способами (согласно на количество параметров, которые я получу), и с этим я получил свой ответ в Json, я оставляю код интерфейса ниже:

public interface RespuestaVo {

    String getCode();
    String getResult();

}

Я рекомендую использовать @Query для запуска Stored Procedue с Пружинный ботинок

0 голосов
/ 18 февраля 2020

Попробуйте это -

@GetMapping("/service/{movil}")
public RespuestaVo  ConsultarMovil(@PathVariable("movil") String movil) {
    return dao.validarClienteBonifiado(movil);

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