为什么会报错,springboot?
package com.itheima.springbootquickstart.controller;
import com.itheima.springbootquickstart.pojo.Result;
import com.itheima.springbootquickstart.pojo.User;
import com.itheima.springbootquickstart.service.UserService;
import com.itheima.springbootquickstart.utils.JwtUtil;
import com.itheima.springbootquickstart.utils.Md5Util;
import com.itheima.springbootquickstart.utils.ThreadLocalUtil;
import jakarta.validation.constraints.Pattern;
import org.hibernate.validator.constraints.URL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/user")
@Validated
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$")String password) {
// 查询用户
User u = userService.findByUserName(username);
if (u == null) {
// 没有占用
// 注册
userService.register(username, password);
return Result.success();
} else {
// 占用
return Result.error("用户名已被占用");
}
}
@PostMapping("/login")
public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$")String password){
//根据用户名查询用户
User loginUser = userService.findByUserName(username);
// 判断用户是否存在
if(loginUser==null){
return Result.error("用户名错误");
}
if (Md5Util.getMD5String(password).equals(loginUser.getPassword())){
//登录成功
Map<String,Object>claims=new HashMap<>();
claims.put("id",loginUser.getUsername());
claims.put("username",loginUser.getUsername());
String token=JwtUtil.genToken(claims);
return Result.success(token);
}
return Result.error("密码错误");
}
//
@GetMapping("/userInfo")
public Result<User> userInfo(){
// 根据用户名查询
Map<String,Object>map=ThreadLocalUtil.get();
String username=(String)map.get("username");
User user=userService.findByUserName(username);
return Result.success(user);
}
@PutMapping("/update")
public Result update(@RequestBody @Validated User user){
userService.update(user);
return Result.success();
}
@PatchMapping("/updateAvatar")
public Result updateAvatar(@RequestParam @URL String avatarUrl){
userService.updateAvatar(avatarUrl);
return Result.success();
}
@PatchMapping("/updatePwd")
public Result updatePwd(@RequestBody Map<String,String> params){
// 参数校验
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("缺少必要参数");
}
//原密码是否正确
// 调用userService根据用户名拿到原密码,再用old_Pwd比对
Map<String,Object>map=ThreadLocalUtil.get();
String username=(String)map.get("username");
User loginUser=userService.findByUserName(username);
if (!loginUser.getPassword().equals(Md5Util.getMD5String(oldPwd))){
return Result.error("原密码填写不正确");
}
//newPwd和rePwd是否一样
if (!rePwd.equals(newPwd)){
return Result.error("两次填写的新密码不一样");
}
userService.updatePwd(newPwd);
return Result.success();
}
}
package com.itheima.springbootquickstart.service.impl;
import com.itheima.springbootquickstart.mapper.UserMapper;
import com.itheima.springbootquickstart.pojo.User;
import com.itheima.springbootquickstart.service.UserService;
import com.itheima.springbootquickstart.utils.Md5Util;
import com.itheima.springbootquickstart.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Map;
@Service
public class UserServiceImpl implements UserService {
//注入一个Usermapper对象
@Autowired
private UserMapper userMapper;
@Override
public User findByUserName(String username) {
User u= userMapper.findByUserName(username);
return u;
}
@Override
public void register(String username, String password) {
//加密处理
String md5String= Md5Util.getMD5String(password);
// 添加
userMapper.add(username,md5String);
}
//更新
@Override
public void update(User user) {
user.setUpdateTime(LocalDateTime.now());
userMapper.update(user);
}
//更新头像
@Override
public void updateAvatar(String avatarUrl) {
Map<String,Object> map=ThreadLocalUtil.get();
Integer id=(Integer)map.get("id");
userMapper.updateAvatar(avatarUrl,id);
}
@Override
public void updatePwd(String newPwd) {
Map<String,Object> map=ThreadLocalUtil.get();
Integer id=(Integer)map.get("id");
userMapper.updatePwd(Md5Util.getMD5String(newPwd),id);
}
}
package com.itheima.springbootquickstart.service;
import com.itheima.springbootquickstart.pojo.User;
public interface UserService {
//根据用户名查询用户
User findByUserName(String username);
//注册
void register(String username, String password);
//更新
void update(User user);
//更新用户头像
void updateAvatar(String avatarUrl);
//更新密码
void updatePwd(String newPwd);
}
package com.itheima.springbootquickstart.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.NonNull;
import java.time.LocalDateTime;
@Data
public class User {
@NotNull
private Integer id;//主键ID
private String username;//用户名
@JsonIgnore//让springmvc把当前对象转换为json字符串的时候,忽略password,做种的json字段中没有password
private String password;//密码
@NotEmpty
@Pattern(regexp = "^\\S{1,10}$")
private String nickname;//昵称
@Email
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
package com.itheima.springbootquickstart.mapper;
import com.itheima.springbootquickstart.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@Mapper
public interface UserMapper {
//根据用户名查询用户
@Select("select * from user where username = #{username}")
User findByUserName(String username);
//添加
@Insert("insert into user(username, password, create_time, update_time) values(#{username}, #{password}, now(), now())")
void add(String username,String password);
//更新
@Update("update user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id=#{id}")
void update(User user);
//更新头像
@Update("update user set user_pic=#{avatarUrl},update_time=now() where id=#{id}")
void updateAvatar(String avatarUrl,Integer id);
//更新密码
@Update("update user set password=#{md5String},update_time=now() where id=#{id}")
void updatePwd(String md5String, Integer id);
}