springboot+vue项目实战2024第四集修改文章信息

1.添加文章信息

    @PostMapping
    public Result add(@RequestBody @Validated Article article){
        articleService.add(article);
        return Result.success();
    }
        void add(Article article);
@Override
public void add(Article article) {
        article.setCreateTime(LocalDateTime.now());
        article.setUpdateTime(LocalDateTime.now());
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer id =(Integer) map.get("id");
        article.setUserId(id);
        articleMapper.add(article);
        }

@Insert("insert into article(title,content,cover_img,state,cate_id," +
        "create_time,update_time,user_id)" +
        " values (#{title},#{content},#{coverImg},#{state},#{cateId}," +
        "#{createTime},#{updateTime},#{userId})")
    void add(Article article);


2.查询文章信息


 @GetMapping
    public Result<PageBean<Article>> list(
            Integer pageNum,
            Integer pageSize,
            @RequestParam(required = false) Integer cateId,
            @RequestParam(required = false) String state

    ){
        PageBean<Article> pb=articleService.list(pageNum,pageSize,cateId,state);
        return Result.success(pb);
    }

         PageBean<Article> list(Integer pageNum, Integer pageSize, Integer cateId, String state);

 @Override
 public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer cateId, String state) {
         PageBean<Article> pageBean = new PageBean<>();
         PageHelper.startPage(pageNum,pageSize);
         Map<String,Object> map = ThreadLocalUtil.get();
         Integer id = (Integer) map.get("id");
         List<Article> as=articleMapper.list(id,cateId,state);
         Page<Article> p=(Page<Article>) as;
         pageBean.setTotal(p.getTotal());
         pageBean.setItems(p.getResult());
         return pageBean;
         }


         List<Article> list(Integer userId, Integer cateId, String state);

 @Data
 public class Article {
     private Integer id;
     @NotEmpty
     @Pattern(regexp = "^\\S{1,10}$")
     private String title;
     @NotEmpty
     private String content;
     @NotEmpty
     @URL
     private String coverImg;
     @State
     private String state;
     private Integer userId;
     @NotNull
     private Integer cateId;
     private LocalDateTime createTime;
     private LocalDateTime updateTime;
 }
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 public class PageBean <T>{
     private Long total;
     private List<T> items;
 }

 @Documented
 @Constraint(
         validatedBy = {StateValidation.class}
 )
 @Target({ ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface State {
     String message() default "state参数的值只能是已经发布或者草稿";

     Class<?>[] groups() default {};

     Class<? extends Payload>[] payload() default {};
 }


 public class StateValidation implements ConstraintValidator<State,String> {

     @Override
     public boolean isValid(String var1, ConstraintValidatorContext var2){
         if(var1==null)return false;
         if(var1.equals("已发布")||var1.equals("草稿"))return true;
         return false;
     }
 }

3.配置分页

   <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper-spring-boot-starter</artifactId>
          <version>1.4.6</version>
      </dependency>

4.redis使用存储token

    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/big_event
    username: root
    password: root
  data:
    redis:
      host: localhost
      port: 6379

    @PatchMapping("/updatePwd")
    public Result updatePwd(@RequestBody Map<String,String> params,@RequestHeader("Authorization")String token){
        String oldPwd = params.get("old_pwd");
        String newPwd = params.get("new_pwd");
        String rePwd = params.get("re_pwd");
        if(!StringUtils.hasLength(oldPwd) ||
        !StringUtils.hasLength(newPwd)||
        !StringUtils.hasLength(rePwd)){
            return Result.error("缺少必要参数");
        }
        Map<String,Object> map = ThreadLocalUtil.get();
        String username = (String) map.get("username");
        User user = userService.findByUserName(username);
        if(!user.getPassword().equals(Md5Utils.encrypt3ToMd5(oldPwd))){
            return Result.error("原密码填写不正确");
        }
        if(!rePwd.equals(newPwd)){
            return Result.error("两次填写的密码不一致");
        }
        userService.updatePwd(newPwd);
        ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
        operations.getOperations().delete(token);
        return Result.success();
    }

    @PostMapping("/login")
    public Result<String> login(@Pattern(regexp = "^\\S{4,16}$") String username,
    @Pattern(regexp = "^\\S{5,16}$") String password){
            User loginUser = userService.findByUserName(username);
            if(loginUser==null){
            return Result.error("用户名错误");
            }
            if(Md5Utils.encrypt3ToMd5(password).equals(loginUser.getPassword())){
            Map<String, Object> map = new HashMap<>();
            map.put("id",loginUser.getId());
            map.put("username",loginUser.getUsername());
            String s = JwtUtil.genToken(map);
            ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
            operations.set(s,s,1, TimeUnit.HOURS);
            return Result.success(s);
            }
            return Result.error("密码错误");

            }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String token = request.getHeader("Authorization");
            try {
            ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
            String s = operations.get(token);
            if(s==null){
            throw new RuntimeException();
            }

            Map<String, Object> map = JwtUtil.parseToken(token);
            ThreadLocalUtil.set(map);
            return true;
            }catch (Exception e){
            response.setStatus(401);
            return false;
            }
            }

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 09:30:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 09:30:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 09:30:02       57 阅读
  4. Python语言-面向对象

    2024-07-12 09:30:02       68 阅读

热门阅读

  1. c#验证输入语句是否带有sql入侵的方法

    2024-07-12 09:30:02       27 阅读
  2. 【LinuxC语言】手撕Http协议之GET方法的实现

    2024-07-12 09:30:02       25 阅读
  3. 云端荣耀:在iCloud中记录您的个人成就与荣誉

    2024-07-12 09:30:02       30 阅读
  4. Postman接口测试工具详解

    2024-07-12 09:30:02       26 阅读
  5. GESP C++ 三级真题(2024年3月)T2 完全平方数

    2024-07-12 09:30:02       22 阅读
  6. 【排序 - 选择排序优化版(利用堆排序)】

    2024-07-12 09:30:02       22 阅读
  7. 【贪心算法题记录】134. 加油站

    2024-07-12 09:30:02       24 阅读
  8. 超级源点/汇点(算法篇)

    2024-07-12 09:30:02       30 阅读
  9. 【MySQL】6.表的增删查改(CURD)

    2024-07-12 09:30:02       23 阅读
  10. 开源项目的机遇与挑战

    2024-07-12 09:30:02       24 阅读
  11. 从0到1搭建数据中台(2):数据中台架构

    2024-07-12 09:30:02       24 阅读
  12. 【C/C++】内存相关

    2024-07-12 09:30:02       25 阅读
  13. 【LeetCode 0169】【摩尔投票算法】主元素

    2024-07-12 09:30:02       24 阅读
  14. 每日一道算法题 LCR 151. 彩灯装饰记录 III

    2024-07-12 09:30:02       30 阅读