Home > Java > javaTutorial > body text

How to solve the problem of SpringBoot @PostMapping receiving streaming data from HTTP requests

PHPz
Release: 2023-05-11 16:16:12
forward
1011 people have browsed it

@PostMapping receives stream data from HTTP requests

@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”
}
Copy after login

Client request

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();
}
Copy after login

About @PostMapping annotation analysis

Development process IDEA prompts such as @RequestMapping(value=" /abc", method = "RequestMethod.POST") is replaced with @PostMapping. Now the implementation of @PostMapping.

@PostMapping is a compound annotation. Spring framework 4.3 introduces a variant of the @RequestMapping annotation to better represent the semantics of annotated methods as a shortcut for @RequestMapping(method = RequestMethod.POST) .

That is, it can be simplified to @PostMapping(value="/abc"), which is mainly to facilitate memory.

Many of the following methods are aliases corresponding to the @RequestMapping tag.

@RequestMapping(value = “”, path = “”, params = “”, headers = “”,consumes = “”, produces = “”)
Copy after login
@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 {};

}
Copy after login

Other variants are as follows:

@GetMapping, @PutMapping, @PatchMapping and @DeleteMapping, similar to @PostMapping implementation

The above is the detailed content of How to solve the problem of SpringBoot @PostMapping receiving streaming data from HTTP requests. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template