【问题标题】:Spring Boot and JWT - post request returns page not foundSpring Boot 和 JWT - 未找到发布请求返回页面
【发布时间】:2019-03-15 21:20:57
【问题描述】:

我正在尝试在我的 Spring Boot 应用程序中实现 JWT(遵循 this 教程),并且我有一个像这样的 UserController 页面:

@RestController
@RequestMapping("/users")
public class UserController {



    @Autowired
    private ApplicationUserRepository applicationUserRepository;



    private BCryptPasswordEncoder bCryptPasswordEncoder;



    public UserController(ApplicationUserRepository applicationUserRepository,
            BCryptPasswordEncoder bCryptPasswordEncoder) {
        this.applicationUserRepository = applicationUserRepository;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }



    @PostMapping("/users/sign-up")
    public void signUp(@RequestBody ApplicationUser user) {
        user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
        applicationUserRepository.save(user); //Salvataggio sul DB
    } 

}

使用 Postman,如果我向页面 http://localhost:8080/users/sign-up 发出 POST 请求,它会返回 404 page not found 错误。
我不知道在哪里寻找错误或缺失的部分。我在教程中所做的唯一不同的事情是为我的@SpringBootApplication 添加(exclude = { SecurityAutoConfiguration.class }) 以禁用默认登录页面。

【问题讨论】:

    标签: spring-boot jwt


    【解决方案1】:

    错误就在这里:

    @PostMapping("/users/sign-up")
    

    这是因为你的休息控制器已经映射到/users

    替换为:

    @PostMapping("sign-up")
    

    这样做:

    @RestController
    @RequestMapping("/users")
    public class UserController {
    
    
        @Autowired
        private ApplicationUserRepository applicationUserRepository;
    
    
    
        private BCryptPasswordEncoder bCryptPasswordEncoder;
    
    
    
        public UserController(ApplicationUserRepository applicationUserRepository,
            BCryptPasswordEncoder bCryptPasswordEncoder) {
            this.applicationUserRepository = applicationUserRepository;
            this.bCryptPasswordEncoder = bCryptPasswordEncoder;
        }
    
    
    
        @PostMapping("sign-up")
        public void signUp(@RequestBody ApplicationUser user) {
            user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
            applicationUserRepository.save(user); //Salvataggio sul DB
        } 
    
    }
    

    您是否正确地发出邮递员请求? 试试:

    curl -H "Content-Type: application/json" -X POST -d '{
        "username": "admin",
        "password": "password"
    }' http://localhost:8080/users/sign-up
    

    你得到一个404,然后检查你项目的其他文件。

    【讨论】:

    • 谢谢,但不幸的是我也遇到了同样的问题。我也试过用“/sign-up”代替“sign-up”,但没有用
    • 即使您清理了缓存并重新启动了服务器?
    • 是的。我试过在类名前添加@PostMapping("/users/sign-up") 和删除@RequestMapping("/users"),但没有改变
    • 尝试@PostMapping("sign-up/")http://localhost:8080/users/sign-up/ 作为邮递员
    • 没有改变
    猜你喜欢
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2019-09-16
    相关资源
    最近更新 更多