#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 и следующей установки