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

97 阅读1分钟

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;  
}  
}