Java Методы ServiceImpl продолжают возвращать ноль - PullRequest
0 голосов
/ 13 января 2020

Я новичок в использовании MVC и spring и у меня возникли проблемы с добавлением служебного файла. У меня есть 3 файла: Controller. java, Service. java и ServiceImpl. java. Моя цель - переместить все текущие логики c службы в существующем классе Controller на уровень Service, поэтому я знаю, что logi c внутри методов не является проблемой. Проблема, с которой я сталкиваюсь, заключается в том, что все методы Я пытаюсь позвонить из службы. java в контроллере. java возвращает ноль и приводит к ошибкам нулевого указателя.

Я видел много решений, когда переменная autowired была нулевой, но я уверен, что это не моя проблема.

Контроллер. java

package project.controller;

import project.type.ServiceType;
import project.service.Service;

@Controller
public class Controller {
    @Autowired
    private final Service service;

    @Autowired
    public Controller(final Service service) {
        this.service = service;
    }

@RequestMapping(method = RequestMethod.POST)
    public @ResponseBody Object post() {

        ServiceType var1 = service.serviceMethod(true); ---> always sets var1 to null
        service.serviceMethod2(var1); ---> Throws NPE

        switch (var1) {
            case SUCCESS:
                return "Success";
            case FAILURE:
                return "Failure";
            default:
                return null;
        }
    }
}

Сервис. java

package project.service;

public interface Service{
    public ServiceType serviceMethod(boolean bool);
    public ServiceType serviceMethod2(ServiceType serviceType);
}

ServiceImpl . java

package project.service.impl;

import project.type.ServiceType;
import project.service.Service;

@Service
public class ServiceImpl implements Service{

    @Override
    public ServiceType serviceMethod(boolean bool){
       if(bool){
          return ServiceType.SUCCESS;
       }
       return ServiceType.FAILURE;
    }

    @Override
    public ServiceType serviceMethod2(ServiceType serviceType){
       *calculate*
    }
}

ServiceType. java

package project.type;

public enum ServiceType {
    SUCCESS,
    FAILURE
}

ServiceConfig. java

package project.config;

import Service;
import ServiceImpl;

@Configuration
public class ServiceConfig {
    @Bean
    public Service Service() {
        return new ServiceImpl();
    }
}

В IntelliJ видно, что моя служебная переменная = "service", поэтому она, кажется, вытягивает из правильного местоположения.

Я приложил все усилия, чтобы воссоздать мой код в общем c путь. Я чувствую, что отсутствует какая-то небольшая связь, которая может быть причиной этой проблемы, поэтому любые мысли о том, почему это происходит, будут высоко оценены!

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Пожалуйста, добавьте

@ComponentScan(basePackages = "project")
@Configuration

в файл конфигурации. Поскольку весна должна знать, где взять ваши бобы.

Наряду с этим изменилась видимость ваших методов

    public ServiceType serviceMethod(boolean bool){
      if(bool){
          return ServiceType.SUCCESS;
       }
       return ServiceType.FAILURE;
    }
public ServiceType serviceMethod2(ServiceType serviceType){
       /**calculate**/  
        return ServiceType.SUCCESS;
    }
0 голосов
/ 13 января 2020

Кажется, объект ServiceType, возвращаемый из serviceMethod (), имеет значение null. Так же вы можете вызывать serviceMethod () используя сервис @Autowired. Проверьте вашу реализацию serviceMethod ().

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