Ошибка при создании компонента с именем «RequestMappingHandlerMapping», определенным в ресурсе пути к классу

#java #spring #spring-boot #maven

Вопрос:

Я прекрасно знаю, что этот вопрос уже задавался, но ни один из ответов мне не помог. «Веб-контроллер», который он упоминает в трассировке стека, отсутствует, он существовал раньше. Я надеюсь, что вы сможете мне помочь..

**организация.каркасная работа.фасоль.фабрика.Исключение BeanCreationException: Ошибка при создании компонента с именем «RequestMappingHandlerMapping», определенным в ресурсе пути к классу

[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Не удалось вызвать метод инициализации; вложенное исключение-java.lang.Исключение IllegalStateException: Неоднозначное сопоставление. Не удается сопоставить метод «webController»

com.пример.демонстрация.контроллеры.WebController#showForm(форма лица) для {GET [/register]}: Уже существует метод компонента «RegisterController»

**

com.пример.демонстрация.контроллеры.RegisterController#Отображена форма(форма лица).

ПОМ:

4.0.0 организация.каркасная работа.загрузочная пружина-загрузочный стартер-родительский 2.4.5 com.демонстрационный пример 0.0.1-Демонстрационный МОМЕНТАЛЬНЫЙ снимок Демонстрационного проекта для весенней загрузки <java.версия>1.8<java.версия></java.версия> org.springframework.загрузочная пружина-загрузочный стартер-данные-jpa-организация.каркас пружины.загрузочная пружина-загрузочная стартовая организация проверки.каркас пружины.загрузочная пружина-загрузочный стартер-организация безопасности.каркас пружины.загрузочная пружина-загрузочный стартер-организация thymeleaf.каркас пружины.загрузочная пружина-загрузка-стартер-веб-организация.thymeleaf.дополнительные функции thymeleaf-дополнительные функции-springsecurity5

     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
 

Класс:

@Controller публичный класс LoginController реализует WebMvcConfigurer {

 @Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/a").setViewName("results");
    registry.addViewController("/login").setViewName("login");
    registry.addViewController("/access-denied").setViewName("accessDenied");
}

@GetMapping
public String goToHome(Principal principal){
    if(principal.getName().equalsIgnoreCase("admin"))
    return "Homepage";
    else return "start";

}
 

}

@Controller
public class RegisterController implements WebMvcConfigurer {

 @Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/results").setViewName("results");
}

@Autowired
RegisterRepository registerRepository;

@GetMapping(value = "/register")
public String showForm(PersonForm personForm) {
    return "formValidation";
}

@PostMapping(value = "/register")
public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult,
                              @RequestParam(value = "nome") String nome,
                              @RequestParam(value = "cognome") String cognome,
                              @RequestParam(value = "dataNascita") String dataNascita,
                              @RequestParam(value = "password") String password) {

    if (bindingResult.hasErrors()) {
        return "formValidation";
    } else if (registerRepository.findByCognome(cognome) == null) {
        Utente utente = new Utente(0, nome, cognome, LocalDate.parse(dataNascita), false, password);
        registerRepository.save(utente);
        UserDetails user =
                User.withDefaultPasswordEncoder()
                        .username(utente.getCognome())
                        .password(utente.getPassword())
                        .roles("USER")
                        .build();

        WebSecurityConfig.inMemoryUserDetailsManager.createUser(user);

        return "results";
    }
    else return "errorRegisterPerson";


}

@PostMapping(value = "/results")
public String returnResults(){
    return "results";
}
 

}

@Controller
public class ShowUserController {

 @Autowired
RegisterRepository registerRepository;

@Autowired
UserRepository userRepository;

@GetMapping(value = "/Users")
public String showUsersDB(Model model){
    List<Utente> lista = registerRepository.findAll();
    model.addAttribute("lista", lista);

    return "Users";
}

@GetMapping(value = "/searchUser")
public String searchUserForName(@RequestParam(value = "name")String nome, Model model){
    List<Utente> lista = Collections.singletonList(userRepository.findByCognome(nome));
    model.addAttribute("lista", lista);

    return "Users";
}

@PostMapping(value = "/addUser")
public String addUser(@RequestParam String name,
                      @RequestParam String surname,
                      @RequestParam String date,
                      @RequestParam String password,
                      Model model){

    LocalDate data = LocalDate.parse(date);
    Utente utente = new Utente(0,name,surname,data,false,password);
    registerRepository.save(utente);

    UserDetails user =
            User.withDefaultPasswordEncoder()
                    .username(utente.getCognome())
                    .password(utente.getPassword())
                    .roles("USER")
                    .build();

    WebSecurityConfig.inMemoryUserDetailsManager.createUser(user);

    List<Utente> lista = registerRepository.findAll();
    model.addAttribute("lista", lista);

    return "Users";

}

@GetMapping(value = "/prova/{password}")
public String show(@PathVariable("password")String password, Model model){

    model.addAttribute("oldPassword",password);

    return "UserProfile";
}

@PostMapping(value = "/changeUserPsw/{oldPsw}")
public String changePsw(@PathVariable("oldPsw")String oldPsw,@RequestParam(value = "password")String password,
                        Model model){
    userRepository.setUserPassword(password,oldPsw);

    List<Utente> lista = registerRepository.findAll();
    model.addAttribute("lista", lista);

    return "Users";
}
 

}

@Controller
public class UserController {

 @Autowired
RegisterRepository registerRepository;

@GetMapping("/ciaooo")
public String showUserDB(Model model){
    model.addAttribute("lista",registerRepository.findAll());
    return "Users";
}
 

}

@Контроллер общественного класса VehiclesController {

 @Autowired
VehiclesRepository vehiclesRepository;


@GetMapping(value = "/Vehicles")
public String showVehiclesDB(Model model){
    List<Mezzo> lista = vehiclesRepository.findAll();
    model.addAttribute("lista", lista);

    return "Vehicles";
 

}

 @GetMapping(value = "/searchVehicles")
public String searchVehiclesForName(@RequestParam(value = "name")String nome, Model model){
    List<Mezzo> lista = Collections.singletonList(vehiclesRepository.findByModello(nome));
    model.addAttribute("lista", lista);

    return "Users";
}

@GetMapping(value = "/prova/{targa}")
public String showTarga(@PathVariable("targa")String targa, Model model){

    model.addAttribute("oldTarga",targa);

    return "VehicleProfile";
}

@PostMapping(value = "/changeVehicleTarga/{vecchiaTarga}")
public String changeTarga(@PathVariable("vecchiaTarga")String oldTarga,@RequestParam(value = "targa")String targa,
                        Model model){
    vehiclesRepository.setVehicleTarga(targa,oldTarga);

    List<Mezzo> lista = vehiclesRepository.findAll();
    model.addAttribute("lista", lista);

    return "Vehicles";
}

@PostMapping(value = "/addVehicle")
public String addVehicle(@RequestParam(value = "modello")String modello,
                         @RequestParam(value = "casaCostr")String casaCostr,
                         @RequestParam(value = "tiplogia")String tipologia,
                         @RequestParam(value = "targa")String targa,
                         @RequestParam(value = "annoImm")int annoImm,
                         Model model){

    Mezzo mezzo = new Mezzo(0,targa,modello,casaCostr,tipologia,annoImm);
    vehiclesRepository.save(mezzo);

    List<Mezzo> lista = vehiclesRepository.findAll();
    model.addAttribute("lista", lista);

    return "Vehicles";

}
 

}

Ответ №1:

Проблема в том, что у вас есть то же самое для двух методов, которые Ambiguous mapping Cannot map

В ithe RegisterController у вас есть то же самое для get и post, дайте какое-то другое имя для этих методов сопоставления.

Ответ №2:

Это исключение возникает, когда у вас есть сопоставление нескольких запросов с одним и тем же именем и точно такими же глаголами HTTP (GET, POST, PUT, DELETE).

В вашем случае вы, должно быть, уже объявляли сопоставление GET /register конечных точек в другом файле.

Замените эту GET /register конечную точку некоторым префиксом, например /vehicle/register , чтобы сделать ее отличимой от предыдущего сопоставления. Это решит вашу проблему.

Комментарии:

1. Спасибо вам за ответ. Я решил эту проблему, выполнив пилотную сборку, MAVEN -> Очистить Maven и следующую установку. Я думаю, что в памяти был еще один класс, который я удалил, но в памяти его нет.

Ответ №3:

Эта проблема была решена с помощью: Maven -> очистить Maven и следующей установки