前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SpringBoot教程】SpringBoot开发POST请求接口用户登录token实战,多种入参方式介绍

【SpringBoot教程】SpringBoot开发POST请求接口用户登录token实战,多种入参方式介绍

作者头像
大数据小禅
发布2023-03-27 09:55:11
1.6K0
发布2023-03-27 09:55:11
举报
文章被收录于专栏:YO大数据

专栏地址 系列教程更新中 🚀 专栏介绍: 本专栏为SpringBoot+Spring+Mybatis的系列零基础教程,从框架的基础知识讲起,从0开始实现一个在线教育实战项目

在这里插入图片描述
在这里插入图片描述

SpringBoot请求实战

实现效果(用户登录接口)
  • 第一种方式可以通过url来提交post参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 第二种方式可以通过Json数据进行交互(常用)
  • 使用PostMan进行接口测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码编写Post请求代码参考
  • Spring Boot中的POST请求可以通过以下步骤进行:
  • 在控制器类中编写POST请求处理方法,使用@PostMapping注解来标记该方法。例如:
代码语言:javascript
复制
@RestController
public class UserController {

    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // 处理创建用户的逻辑
        return ResponseEntity.ok(user);
    }
}
  • 上述代码中,createUser方法处理/users路径的POST请求,该请求的请求体为User对象,使用ResponseEntity类来封装返回结果。
  • 在请求中发送POST请求,可以使用RestTemplate类或HttpClient类来发送请求。例如:
代码语言:javascript
复制
RestTemplate restTemplate = new RestTemplate();
User user = new User("John", "Doe");
ResponseEntity<User> response = restTemplate.postForEntity("http://localhost:8080/users", user, User.class);
  • 上述代码中,使用RestTemplate类发送POST请求,请求的URL为http://localhost:8080/users,请求体为User对象,并且期望返回的结果为User对象。
  • 在请求中添加请求头或请求参数,可以使用HttpHeaders类或MultiValueMap类来添加请求头或请求参数。例如:
代码语言:javascript
复制
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
User user = new User("John", "Doe");
HttpEntity<User> request = new HttpEntity<>(user, headers);
ResponseEntity<User> response = restTemplate.exchange("http://localhost:8080/users", HttpMethod.POST, request, User.class);
  • 上述代码中,使用HttpHeaders类设置请求头,使用HttpEntity类封装请求体和请求头,使用RestTemplate类发送POST请求,并且使用exchange方法来处理请求和响应。
@Repository注解详解
  • 优先还未使用到Mybatis框架与数据库进行交互 这里先试用模拟产生的数据测试
  • @Repository是Spring框架中的注解之一,用于标记一个类是数据访问层(DAO)的组件,即用于访问数据库或其他持久化机制的类。
  • 使用@Repository注解标记的类通常包含了对数据库的操作,例如增、删、改、查等。在Spring中,使用@Repository注解标记的类会被自动注册为Spring Bean,可以在其他组件中使用@Autowired注解来注入该类的实例。
  • 示例代码:
代码语言:javascript
复制
@Repository
public class UserDaoImpl implements UserDao {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Override
    public User getUserById(int id) {
        String sql = "SELECT * FROM user WHERE id = ?";
        User user = jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
        return user;
    }
    
    // other methods
}
  • 上述代码中,使用@Repository注解标记了UserDaoImpl类,该类使用JdbcTemplate来访问数据库,并提供了getUserById方法来查询指定ID的用户信息。其他方法实现类似,可以进行增、删、改等操作。
Post请求实战
  • usermapper,模拟生产数据,后面的文章使用mybatis进行数据库交互:
代码语言:javascript
复制
@Repository   //这个注解记得加上去
public class UserMapper {
    private  static Map<String, User> userMap=new HashMap<>();
    //静态加载类,加载一次,已启动就有信息的了。
    static {
        userMap.put("jack",new User(1,"jack","123"));
        userMap.put("xdclass-lw",new User(2,"xdclass","12343"));
        userMap.put("tom",new User(3,"tom","123123"));
    }

    public User login(String username,String pwd) {
        User user = userMap.get(username);    //userMap.put("tom",new User(3,"tom","123123"));  value是一个user
        System.out.println(user+"=====");
        if(user==null){
            return null;
        }
        if (user.getPwd().equals(pwd)){
            return user;
        }
        return null;

    }
}

接口类:

代码语言:javascript
复制
public interface UserService {
    String login(String username,String pwd);
}

接口实现类:

代码语言:javascript
复制
@Service    //每个类的注解别忘了加
public class UserServiceImpl implements UserService {

    private static Map<String,User> sessionMap=new HashMap<>();   //模拟

    @Autowired  //注入
    private UserMapper userMapper;

    @Override
    public String login(String username, String pwd) {
        User user=userMapper.login(username,pwd);
        if (user==null){
            return null;
        }else {
            String token= UUID.randomUUID().toString();   //生成唯一识别码
            System.out.println(token);
            sessionMap.put(token,user);
            return token;
        }
    }
}

控制层:

代码语言:javascript
复制
@RestController
@RequestMapping("/api/v1/pub/user")
public class UserController {

//    @PostMapping("login")
//    public JsonData login(String pwd,String username){
//        //http://localhost:8080/api/v1/pub/user/login?username=YO&pwd=9812432   再PostMan这样请求就会打印出对应的结果
//        System.out.println("username="+username+"pwd="+pwd);
//        return JsonData.buildSuccess("");
//    }
    @Autowired  //注入
    public UserService userService;

    @PostMapping("login")
    public JsonData login(@RequestBody User user){
        //http://localhost:8080/api/v1/pub/user/login?username=YO&pwd=1233424   再PostMan这样请求就会打印出对应的结果
        System.out.println("user"+user.toString());
        String token=userService.login(user.getUsername(),user.getPwd());
        return token!=null?JsonData.buildSuccess(token):JsonData.buildSuccess("账号密码错误");
    }
}
  • 测试postman:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfciSkIg-1679843974956)(picture/image-20210402160128320.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfciSkIg-1679843974956)(picture/image-20210402160128320.png)]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot请求实战
    • 实现效果(用户登录接口)
      • 代码编写Post请求代码参考
        • @Repository注解详解
          • Post请求实战
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档