SpringBoot之Controller实体参数验证

1.添加依赖

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
 <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.6</version>
        </dependency>

2.添加valid文件夹, 在resources下添加 validation和META-INF(资源见文末链接)注:spring.factories里边按项目实际路径修改

3.添加异常拦截ExceptionHandlerControllerAdvice

package com.tripg.controller;

import com.tripg.valid.ValidatorUtil;
import com.tripg.common.RequestResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@Slf4j
@ControllerAdvice(basePackageClasses = ExceptionHandlerControllerAdvice.class)
public class ExceptionHandlerControllerAdvice {

    @ExceptionHandler(BindException.class)
    @ResponseBody
    RequestResult handleControllerValidateException(BindException ex) {
        return new RequestResult(555, ValidatorUtil.getFirstMessage(ex.getBindingResult()));
    }

    @ExceptionHandler(Exception.class)
    @ResponseBody
    RequestResult handleOtherException(Exception ex) {
        log.error("Controller层抛出异常", ex);
        return new RequestResult(444);
    }
}

4.测试

package com.tripg.controller;

import com.tripg.model.TestValid;
import com.tripg.webcommon.StandardResult;
import com.tripg.common.RequestResult;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;

@RestController
public class QueryController {

    @Autowired
    private HttpServletRequest request;

    @GetMapping("testvalid")
    public RequestResult test(@Valid TestValid test){

        return StandardResult.Repack(new RequestResult());
    }
}
package com.tripg.model;

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;

@Getter
@Setter
public class TestValid {

    @NotEmpty(message = "测试属性")
    String testname;
}

测试结果:

 

资源文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一个完整的 SpringBoot 使用 JWT 生成 token 的例子: 1. 实体类 假设我们有一个 User 实体类,其中包含了用户的 id、用户名和密码等信息。 ```java public class User { private Integer id; private String username; private String password; // 省略 getter 和 setter } ``` 2. Mapper 我们使用 MyBatis 作为 ORM 框架,所以需要定义一个 UserMapper 接口来操作用户数据。 ```java @Mapper public interface UserMapper { User selectByUsername(String username); } ``` 3. Service 在 UserService 中,我们需要实现用户登录的业务逻辑。首先根据用户名查询用户信息,然后判断密码是否正确,最后生成 token 并返回给客户端。 ```java @Service public class UserService { @Autowired private UserMapper userMapper; public String login(String username, String password) { // 根据用户名查询用户信息 User user = userMapper.selectByUsername(username); if (user == null) { throw new RuntimeException("用户不存在"); } // 判断密码是否正确 if (!user.getPassword().equals(password)) { throw new RuntimeException("密码错误"); } // 生成 token Map<String, Object> payload = new HashMap<>(); payload.put("userId", user.getId()); payload.put("username", user.getUsername()); String token = JWT.create() .withPayload(payload) .sign(Algorithm.HMAC256("secret")); return token; } } ``` 4. Controller 在 UserController 中,我们定义一个 login 接口来处理用户登录请求。客户端在登录时需要传递用户名和密码,我们在服务器端调用 UserService 的 login 方法进行登录验证,并将生成的 token 返回给客户端。 ```java @RestController public class UserController { @Autowired private UserService userService; @PostMapping("/login") public String login(@RequestParam String username, @RequestParam String password) { String token = userService.login(username, password); return token; } } ``` 这样,我们就完成了一个使用 JWT 生成 token 的简单的 SpringBoot 应用。需要注意的是,为了确保 token 的安全性,我们需要在生成 token 时使用一个秘钥来进行签名,这里我们使用了 "secret" 作为秘钥。在实际使用中,需要使用更加复杂的秘钥来确保 token 的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值