亲测SpringBoot 参数传递以及@RequestBody注解---踩过的坑

SpringBoot 参数传递以及@RequestBody注解注意点

  1. 前台正确的js书写格式是:
//点击查询, 执行下面这个函数
$("#searchByCriteria").click(function () {
     //var paramdata = $("#bck_qry_criteria_form").serializeJson();//serializeJson()是自定义的form 格式化为json函数
     var paramdata = {
         type:$("#bck_type").val(),
         title:$("#bck_title").val(),
         start:$("#bck_start").val(),
         end:$("#bck_end").val()
     };
     paramdata = JSON.stringify(paramdata);
     $.ajax({
         type: "post",
         data: paramdata,
         url: "/getNews",
         cache:false,
         headers : {"Content-Type" : "application/json;charset=utf-8"},
         success: function (data) {
             var code = data.code;
             var t = data.t;
             if (code == 200){alert(JSON.stringify("提交成功! 我们会尽快联系您!"));}
             if (code == 500){alert(JSON.stringify(t));}

             //$("#input_phone").val("");//清空输入框
         }
     })
 });

上面中传递的参数一定要用JSON.stringify(paramdata); 方法将参数转换成json格式的字符串; 因为SpringBoot 中@RequestBody注解要求的必须是json格式的字符串才能注入参数, 第二就是大坑, 大坑, 大坑, 请求中必须 带上请求头,不然会报下面错误

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
  1. 后台正确的Controller书写格式是:

其中consumes = “application/json”, 规范的讲是要加的, 它规范了,前台要传递json格式的参数. 但是如果你不加也是可以的, 亲测不加也能封装到参数.NewsParamsMap中属性

@PostMapping(value = "/getNews",  consumes = "application/json")
@ResponseBody
public PageInfo<NewsList> getNewsList(@RequestBody NewsParamsMap map){
    System.out.println("这是正确的用法");
    return null;
}

NewsParamsMap 中有Integer 有Date, 前台传过来都是字符串, springboot,会根据名称一一对应, 将数据转换成相应的类型.

public class NewsParamsMap {
    private Integer type;
    private String title;
    private Date start;
    private Date end;
   ...
   set get 方法
   ...
}

在这里插入图片描述

在这里插入图片描述

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为你提供一个简单的登录案例,使用Spring Boot框架和相关注解来实现。 首先,我们需要创建一个名为"UserController"的控制器类。该类将处理用户登录请求,并返回相应的响应。 ```java @Controller public class UserController { @Autowired private UserService userService; @PostMapping("/login") @ResponseBody public ResponseEntity<String> login(@RequestBody UserDto userDto) { User user = userService.login(userDto.getUsername(), userDto.getPassword()); if (user != null) { return new ResponseEntity<>("Login Successful", HttpStatus.OK); } else { return new ResponseEntity<>("Login Failed", HttpStatus.UNAUTHORIZED); } } } ``` 在上面的代码中,我们使用了@Controller注解来标记该类为控制器类,@Autowired来注入UserService实例,@PostMapping注解用于处理HTTP POST请求,@ResponseBody注解用于将响应体直接返回给客户端,而无需使用模型和视图。@RequestBody注解用于将请求体转换为UserDto对象,然后我们使用UserService实例进行用户登录验证,如果用户存在,则返回成功响应,否则返回失败响应。 接下来,我们需要创建一个UserService类,该类将处理用户登录逻辑。 ```java @Service public class UserService { @Autowired private UserRepository userRepository; public User login(String username, String password) { User user = userRepository.findByUsername(username); if (user != null && user.getPassword().equals(password)) { return user; } else { return null; } } } ``` 在上面的代码中,我们使用了@Service注解来标记该类为服务类,@Autowired用于注入UserRepository实例,该类将处理用户登录逻辑。我们首先通过调用UserRepository的findByUsername方法来获取用户实例,然后比较用户密码是否与传递的密码相同。如果是,则返回用户实例,否则返回null。 最后,我们需要创建一个名为"UserDto"的数据传输对象类,该类将用于从请求体中提取用户名和密码。 ```java @Data public class UserDto { private String username; private String password; } ``` 在上面的代码中,我们使用了@Data注解来生成getter和setter方法,以及equals、hashCode和toString方法,这些方法将用于从请求体中提取用户名和密码。 最后,我们需要创建一个名为"UserRepository"的接口,该接口将扩展JpaRepository接口,并提供自定义方法来查询用户实例。 ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); } ``` 在上面的代码中,我们使用了@Repository注解来标记该接口为存储库接口,该接口将扩展JpaRepository接口,并提供自定义方法findByUsername来查询用户实例。 以上就是使用Spring Boot框架和相关注解实现登录案例的全部内容。希望可以对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值