SpringBoot @PostMapping接收HTTP请求的流数据问题

目录
  • @PostMapping接收HTTP请求的流数据
  • 关于@PostMapping注解解析
  • 总结

@PostMapping接收HTTP请求的流数据

@PostMapping("/test")
public String pushMessage(@RequestBody byte[] data) throws Exception {
    String json = URLDecoder.decode(new String(data, DEFAULT_CHARSET), DEFAULT_CHARSET);
    log.info(">>> 接收CP推送的消息:{}", json);

    JSONObject jsonObject = JacksonUtils.jsonToBean(json, JSONObject.class);
    System.out.println(jsonObject.get("key"));
    return “success”
}

Client 请求

try {
    //创建连接
    URL url = new URL(ADD_URL);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setRequestMethod("POST");
    connection.setUseCaches(false);
    connection.setInstanceFollowRedirects(true);
    //application/x-javascript
    //text/xml->xml数据
    //application/x-javascript->json对象
    //application/x-www-form-urlencoded->表单数据
    //application/json;charset=utf-8 -> json数据
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.setRequestProperty("accept", "*/*");
    connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

    connection.connect();

    //POST请求
    DataOutputStream out = new DataOutputStream(connection.getOutputStream());

    JSONObject data = new JSONObject();
    data.element("key", "这是一条测试数据");

    out.writeBytes(data.toString());
    out.flush();
    out.close();

    //读取响应
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String lines;
    StringBuffer sb = new StringBuffer("");
    while ((lines = reader.readLine()) != null) {
        lines = new String(lines.getBytes(), "utf-8");
        sb.append(lines);
    }
    System.out.println(sb);
    reader.close();
    // 断开连接
    connection.disconnect();
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

关于@PostMapping注解解析

开发过程IDEA提示如将@RequestMapping(value="/abc" , method = “RequestMethod.POST”)替换成@PostMapping。现对@PostMapping的实现。

@PostMapping是一个复合注解,Spring framework 4.3引入了@RequestMapping注释的变体,以更好地表示带注释的方法的语义,作为@RequestMapping(method = RequestMethod.POST)的快捷方式。

也就是可以简化成@PostMapping(value="/abc" )即可,主要是方便识记。

下面很多方法都是对应着@RequestMapping的标记的别名。

@RequestMapping(value = “”, path = “”, params = “”, headers = “”,consumes = “”, produces = “”)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.POST)
public @interface PostMapping {

	/**
	 * RequestMapping 的别名,
	 */
	@AliasFor(annotation = RequestMapping.class)
	String name() default "";

	/**
	 *RequestMapping#value的别名, 默认为空字符串,一般需要自己填写
	 */
	@AliasFor(annotation = RequestMapping.class)
	String[] value() default {};

	/**
	 * RequestMapping#path的别名
	 */
	@AliasFor(annotation = RequestMapping.class)
	String[] path() default {};

	/**
	 * RequestMapping#params的别名
	 */
	@AliasFor(annotation = RequestMapping.class)
	String[] params() default {};

	/**
	 * RequestMapping#headers的别名
	 */
	@AliasFor(annotation = RequestMapping.class)
	String[] headers() default {};

	/**
	 * RequestMapping#consumes的别名
	 */
	@AliasFor(annotation = RequestMapping.class)
	String[] consumes() default {};

	/**
	 * RequestMapping#produces的别名
	 */
	@AliasFor(annotation = RequestMapping.class)
	String[] produces() default {};

}

其他变体如下:

@GetMapping、@PutMapping、@PatchMapping和@DeleteMapping,与@PostMapping实现类似

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot如何接收Post请求Body里面的参数

    目录 如何接收Post请求Body里的参数 ApiPost测试数据 Java接收数据 SpringBoot获取参数常用方式 参数在body体中 PathVaribale获取url路径的数据 RequestParam获取请求参数的值 如何接收Post请求Body里的参数 ApiPost测试数据 {     "list": [         "{'time':'xxxxx','distinct_id':'xxxx','appId':'xxxx'}",        

  • SpringBoot过滤器如何获取POST请求的JSON参数

    目录 SpringBoot过滤器获取POST请求的JSON参数 想到了使用过滤器来实现这个功能 所以我们可以通过获取到输入流来获取body 从源码我们可以看到 我们创建一个类并继承这个包装类 有一点需要注意的 SpringBoot过滤器获取POST请求的JSON参数 项目中需要将每个请求的路径和请求参数以及响应结果,都记录在日志中,这样在出现问题时可以快速定位是哪里出现了问题. 想到了使用过滤器来实现这个功能 当请求来到过滤器时,会有一个Request参数,通过该参数就能获取到请求路径和请求参数

  • SpringBoot @PostMapping接收HTTP请求的流数据问题

    目录 @PostMapping接收HTTP请求的流数据 关于@PostMapping注解解析 总结 @PostMapping接收HTTP请求的流数据 @PostMapping("/test") public String pushMessage(@RequestBody byte[] data) throws Exception { String json = URLDecoder.decode(new String(data, DEFAULT_CHARSET), DEFAULT_CH

  • SpringBoot@Aspect 打印访问请求和返回数据方式

    目录 SpringBoot@Aspect 打印访问请求和返回数据 aspect:第一种方式 aspect:第二种方式 SpringBoot @Aspect注解详情 1.添加maven依赖注解 2.添加AOP类 3.设置切面点 4.配置前置通知 5.配置后置返回通知 6.后置异常通知 7.后置最终通知 8.环绕通知 SpringBoot@Aspect 打印访问请求和返回数据 为什么要用aspect, 使用aspect 可以使记录日志的功能面向切面,这样可以降低代码的耦合性.提供了两种方式对输入输出

  • SpringBoot如何接收前端传来的json数据

    目录 SpringBoot接收前端传来的json数据 使用POJO 使用Map接收 使用POJO和Map接收的比较 PO和VO相结合 SpringBoot接收json入参 总结 SpringBoot接收前端传来的json数据 当前端传来json数据时,后端有两种方式可以接收:使用POJO和Map进行接收. 前端json数据: {     id:121,      //数字     name:"lhj",     //字符串     scoreList:[     //对象       

  • SpringBoot用实体接收Get请求传递过来的多个参数的两种方式

    目录 一.Controller层不带任何注解接收参数 二.Controller层通过@ModelAttribute接收参数 最近项目中Controller层查询接口需要通过实体来接受前端传过来的多个参数(Get请求),这个问题困扰了我很久,之前在第二家公司的时候,就因为我后端是Get请求,并且是通过实体去接收前端参数的,导致我当天上线搞到半夜没搞好,这次又遇到,势必解决它. 一年前,通过查看大量的坑爹文章,发现网上没有一篇有效的,这次通过阿里主管的协助,成功的通过实体接收到了Get请求传递过来的

  • Vue向后台传数组数据,springboot接收vue传的数组数据实例

    用axios前台代码: let menus_id = this.$refs.tree.getCheckedKeys(); //菜单id [1,2,3]数组 this.$axios.get("/api/epidemic/roleMenus/addBath1",{params:{roleid:this.roleid,menusid:menus_id}}).then((result)=>{ console.log(result) }) 后台代码: @RequestMapping(&qu

  • Django 接收Post请求数据,并保存到数据库的实现方法

    要说基本操作,大家基本都会,但是有时候,有些操作使用小技巧会节省很多时间. 本篇描述的就是使用dict小技巧,保存到数据库,用来节省大家编码的工作量. 主要内容:通过for循环拿到post表单中的值并保存到一个dict中,然后通过**dict保存到数据库中. 1.用户提交了一个表单,表单内容包含csrf. 2.服务端除了表单中的csrf要过滤掉,其它的都要保存到数据库中. 3.具体看下方代码: 下面的代码分别为修改和保存,其中修改是根据ID修改的. 要注意, 1.保存前的resourcesOld

  • springboot接收http请求,解决参数中+号变成空格的问题

    目录 springboot接收http请求,参数中+号变成空格 小插曲 解决get请求中的问题 解决post请求中的问题 SpringBoot问题笔记:http请求参数含有特殊符号[] 解决方法:修改tomcat配置 springboot接收http请求,参数中+号变成空格 小插曲 + 在执行URLEncoder.encode(String,"UTF-8")编码后会变成 %2B + 在执行URLDecoder.decode(String,"UTF-8")编码后会变成

  • SpringBoot接口接收json参数解析

    目录 SpringBoot接口接收json参数 前言 前提 一.GET 二.DELETE 三.POST/PUT/PATCH Springboot restFul 参数检验 概述 常用注解 简单应用举例 自定义校验 抛出BindException而非MethodArgumentNotValidException SpringBoot接口接收json参数 前言 通常来讲,HTTP 方法会映射为 CRUD 动作,但这并不是严格的限制,有时候 PUT 也可以用来创建新的资源,POST 也可以用来更新资源

  • springboot项目完整后端请求Controller层优雅处理

    目录 前言 Controller 层参数接收 统一状态码 | 返回格式 | 封装 ResultVo 统一校验 | 原始做法 | @Validated 参数校验 | 优化异常处理 统一响应 | 统一包装响应 | NOT 统一响应 统一异常 前言 本篇主要要介绍的就是 controller 层的处理,一个完整的后端请求由 4 部分组成: 接口地址(也就是 URL 地址) 请求方式(一般就是 get.set,当然还有 put.delete) 请求数据(request,有 head 跟 body) 响应

随机推荐