Получение NumberFormatException с использованием Spring Data JPA - PullRequest
0 голосов
/ 08 июля 2019

Я изучаю Spring с помощью «Spring in action 5» и столкнулся с некоторой проблемой: когда я переключаюсь на Spring Data JPA из JDBC (который работает на 100% правильно) в главе 3, код перестает работать при попытке открытьглавная страница с ингредиентами тако.Я сделал несколько журналов, чтобы увидеть, что происходит, и обнаружил, что метод findById (String id) не может преобразовать мое значение из БД (или что-то в этом роде).Я использую MySQL.

Я пытался самостоятельно вызывать метод преобразователя convert (String id), используя @Autowired, но единственное, что я обнаружил, было то, что когда ключ неверен, появится другая ошибка.Так что данные видны.Я постараюсь предоставить здесь некоторый код, но я не уверен, что полезно, а что нет.Я получаю сообщение об ошибке при первой попытке что-то записать.Ошибки в IDE и в браузере разные.Вот полный проект https://github.com/thedistantblue/taco-cloud-jpa.

Вот мой конвертер:

    public class IngredientByIdConverter implements Converter<String, 
    Ingredient> {

    private IngredientRepository ingredientRepo;

    @Autowired
    public IngredientByIdConverter(IngredientRepository ingredientRepo) {
        this.ingredientRepo = ingredientRepo;

    }
    @Override
        public Ingredient convert(String id) {
            log.info("In converter.convert(): " 
        +ingredientRepo.findById(id).toString());
            Optional<Ingredient> optionalIngredient = 
        ingredientRepo.findById(id);
            return optionalIngredient.orElse(null);
        }
    }

И класс контроллера:

    @Slf4j
    @Controller
    @RequestMapping("/design")
    @SessionAttributes("order")
    public class DesignTacoController {

    @ModelAttribute(name = "order")
    public Order order() {
        return new Order();
    }

    @ModelAttribute(name = "taco")
    public Taco taco() {
        return new Taco();
    }

    private final IngredientRepository ingredientRepository;
    private TacoRepository designRepository;
    private IngredientByIdConverter converter;

    @Autowired
    public DesignTacoController(IngredientRepository ingredientRepository,
                                TacoRepository designRepository,
                                IngredientByIdConverter converter) {
        this.ingredientRepository = ingredientRepository;
        this.designRepository = designRepository;
        this.converter = converter;
    }

    @GetMapping
    public String showDesignForm(Model model) {
        List<Ingredient> ingredients = new ArrayList<>();



        log.info(converter.convert("CARN").getName());
        log.info("in DTC: " + ingredientRepository.findAll());

        ingredientRepository.findAll().forEach(i -> ingredients.add(i));

В IDE:

java.lang.NumberFormatException: Для входной строки: "PROTEIN" в java.base / jdk.internal.math.FloatingDecimal.readJavaFormatString (FloatingDecimal.java:2054) ~ [na: na] в java.base / jdk.internal.math.FloatingDecimal.parseDouble (FloatingDecimal.java:110) ~ [na: na] в java.base / java.lang.Double.parseDouble (Double.java:543) ~ [na: na]

В браузере:

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500).Для входной строки: "PROTEIN";вложенным исключением является java.lang.NumberFormatException: для входной строки: «PROTEIN» org.springframework.dao.InvalidDataAccessApiUsageException: для входной строки: «PROTEIN»;Вложенное исключение - java.lang.NumberFormatException: для входной строки: «PROTEIN» в org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible (EntityManagerFactoryUtils.java:373)HibernateJpaDialect.java:255) при org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible (AbstractEntityManagerFactoryBean.java:527) в org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible (ChainedPersistenceExceptionTranslator.java:61) в org.springframework.dao.support.DataAccessUtils.translateIfNecessary (DataAccessUtils.java:242) при org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke (PersistenceExceptionTranslationInterceptor.java:153) в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186)

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