我正在尝试在单独的文件中编写 2 个其余控制器。
这是一个控制器:
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@PostMapping("login")
public ResponseEntity<JwtAuthResponeDto> login(@RequestBody LoginDto loginDto){
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
loginDto.getUsername(),
loginDto.getPassword()));
SecurityContextHolder.getContext().setAuthentication(authentication);
String token = jwtTokenProvider.generateToken(authentication);
return new ResponseEntity<>(new JwtAuthResponeDto(token), HttpStatus.OK);
}
@PostMapping("register")
public ResponseEntity<String> register(@RequestBody RegisterDto registerDto) {
if (userRepository.existsByUsername(registerDto.getUsername())) {
return new ResponseEntity<>("Username is taken!", HttpStatus.BAD_REQUEST);
}
UserEntity user = new UserEntity();
user.setUsername(registerDto.getUsername());
user.setPassword(passwordEncoder.encode((registerDto.getPassword())));
RoleEntity role = roleRepository.findByName("role_user").get();
user.setRoles(Collections.singletonList(role));
userRepository.save(user);
return new ResponseEntity<>("User registered success!", HttpStatus.OK);
}}
这是第二个:
@RestController
@RequestMapping("/views")
public class ViewController {
@GetMapping("login")
public ModelAndView login(){
return new ModelAndView("login");
}
}
视图控制器不显示视图,为什么?但是当我将这个 GetMapping 放入第一个控制器时,它就可以正常工作,为什么?
应用程序正在运行,当我输入/views/login webbrowser时,不要显示任何内容,我进入终端: 2023-06-12 13:20:59.994 INFO 10516 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : 初始化 Spring DispatcherServlet 'dispatcherServlet' 2023-06-12 13:20:59.995 INFO 10516 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet :初始化 Servlet 'dispatcherServlet' 2023-06-12 13:21:00.003 INFO 10516 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet :在 3 毫秒内完成初始化
我发现斜杠丢失了,我们可以通过两种方式在请求映射 URL 中定义斜杠。
并且在getMapping或PostMapping中开头不加斜杠,这样当代码编译运行时,可以生成正确的URL路径。
并且在getMapping或PostMapping中以斜杠开头,这样代码编译运行时,就可以生成正确的URL路径。
当前代码中存在一个问题,可以通过接受第 1 点或第 2 点来纠正。
谢谢, 阿舒托什