Java基础—实现微服务模块接收Http请求回调数据

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文中详细介绍在微服务模块中实现接收公网Http请求数据回调接口说明。

壹、涉及微服务结构相关的知识点

从零搭建微服务SpringCloud(二)新建一个SpringCloud项目

贰、实现代码

1、导入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.49</version>
</dependency>

2、resources目录创建application.yml文件

image.png

#自定义端口号
server:
  port: 7000
#自定义服务注册名
spring:
  application:
    name: HTTP-SERVICE

3、搭建启动类

image.png

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HttpServiceRequestStart {
    public static void main(String[] args) {
        SpringApplication.run(HttpServiceRequestStart.class,args);
    }
}

4、创建服务类

image.png

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class HttpServiceRequestService {
    private Logger logger = LoggerFactory.getLogger(HttpServiceRequestService.class);
    public void saveNotify(String reqBody){
        logger.info("reqBody="+reqBody);
        com.alibaba.fastjson.JSONObject resObj = JSONObject.parseObject(reqBody);
        System.out.println(resObj);
    }
}

5、搭建控制层

image.png

import com.cloud.start.com.service.HttpServiceRequestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;

@RestController
@CrossOrigin
@RequestMapping(value = "/first", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class HttpServiceRequestController {
    @Autowired
    private HttpServiceRequestService httpServiceRequestService;
    @RequestMapping(value = "/request" ,method = RequestMethod.POST)
    public String one(HttpServletRequest result){
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(result.getInputStream()));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while((line = br.readLine())!=null){
                sb.append(line);
            }
            String reqBody = sb.toString();
            httpServiceRequestService.saveNotify(reqBody);
        }catch (Exception e){
            e.printStackTrace();
        }
        return "success";
    }
}

叁、参数详解

1、服务层详解

在服务层中,有代码为

com.alibaba.fastjson.JSONObject resObj = JSONObject.parseObject(reqBody);

我们进入JSONObject.parseObject(reqBody);的parseObject(String text)中看一下

image.png

如上图,第一行为Object obj = parse(text);
继续进入到parse方法

image.png

我们发现,parse方法是用来将String类型转为JSON类型

回到parseObject(String text)

如图,如果obj是JSONObject创建的对象,那么直接将obj强转为JSONObject对象并返回
image.png

如果不是JSONObject创建的对象,则将obj转为JSON后强转为JSONObject对象并返回,如果无法转换,则抛出新异常“can not cast to JSONObject”,无法转换为 JSON 对象。
image.png

2、控制层详解

@RequestMapping(value = "/first", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
MediaType参数介绍

目录
相关文章
|
3月前
|
前端开发 JavaScript Java
java常用数据判空、比较和类型转换
本文介绍了Java开发中常见的数据处理技巧,包括数据判空、数据比较和类型转换。详细讲解了字符串、Integer、对象、List、Map、Set及数组的判空方法,推荐使用工具类如StringUtils、Objects等。同时,讨论了基本数据类型与引用数据类型的比较方法,以及自动类型转换和强制类型转换的规则。最后,提供了数值类型与字符串互相转换的具体示例。
153 3
|
24天前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
19天前
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
24 4
|
2月前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
76 21
|
2月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
72 7
|
2月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
109 1
|
2月前
|
存储 Java BI
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
119 17
|
13天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
134 60
【Java并发】【线程池】带你从0-1入门线程池
|
2天前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
46 23
|
9天前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
69 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码