java 模拟请求@RequestBody

本文介绍了一个使用Java实现的RESTful API示例,包括服务端的类定义、请求处理逻辑以及客户端发起请求的方式,并通过curl命令验证了API的功能。

1.服务端

package com.knife.test;

public class A {
	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String toString() {
		return "i am " + name + ", i " + age;
	}

}
@RequestMapping("/testa")
@ResponseBody
public A testa(@RequestBody A a) {
	Logger log = Logger.getLogger(getClass());
	log.info(a);
	return a;
}

2.客户端

String url="http://localhost:8081/testa";
		//String entityJson="{\"name\":\"tom\",\"age\":1}";
		A a=new A();
		a.setName("knife");
		a.setAge(100);
		String entityJson=JSONObject.fromObject(a).toString();
		HttpPost httpost = new HttpPost(url); // 设置响应头信息
		httpost.addHeader("Content-Type", "application/json; charset=UTF-8");
		RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000)
                                     .setConnectTimeout(3000).build();
		httpost.setConfig(requestConfig);
		httpost.setEntity(new StringEntity(entityJson, "UTF-8"));
		String returnStr = null;
		try {
			HttpResponse response = HttpClientBuilder.create().build().execute(httpost);
			returnStr = EntityUtils.toString(response.getEntity(), "utf-8");
			Logger log=Logger.getLogger(testhttp.class);
			log.info("message:"+returnStr);

		} catch (Exception e) {
		} finally {
			httpost.releaseConnection();
		}
14:17:57.668 [main] INFO com.knife.test.testhttp - message:{"name":"knife","age":100}

3.curl方式

[root@localhost ~]#  curl -l -H "Content-type:applicate":"knife","age":100}' http://192.168.0.103:8081/testa
{"name":"knife","age":100}

 

### 关于Knife4j与@RequestBody的集成 在Spring MVC框架中,`@RequestBody` 注解用于将HTTP请求体中的JSON数据绑定到Java对象上。而在使用 Knife4j 调试工具时,该注解的行为会影响调试界面的表现形式。 #### 1. 请求参数的形式 当控制器方法中使用 `@RequestBody` 注解时,Knife4j 的调试界面上不会单独显示各个字段的输入框,而是提供一个 JSON 字符串编辑器[^1]。这意味着开发者需要手动构建符合接口定义的 JSON 数据结构并提交给服务端。 #### 2. 响应错误的情况 如果客户端发送的数据格式不符合预期(例如期望的是 `application/json` 类型而实际接收到的是 `application/x-www-form-urlencoded`),服务器会返回 HTTP 状态码 415 (Unsupported Media Type),并且日志中会出现类似以下警告信息: ``` Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported] ``` 这表明当前配置下无法处理指定的内容类型[^3]。 #### 3. 配置调整建议 为了使 Knife4j 正确展示基于 `@RequestBody` 的 API 接口文档及其交互方式,请确认项目已引入支持 OpenAPI 3 规范的相关依赖项,比如下面这个 Maven 描述片段所示的例子: ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-spring-boot-starter</artifactId> <version>4.3.0</version> </dependency> ``` 上述依赖确保了应用能够按照最新的标准生成详细的 RESTful Web Service 文档,并通过增强版 UI 展现出来[^2]。 #### 示例代码 以下是利用 Spring Boot 和 Knife4j 实现的一个简单例子,展示了如何声明接受 JSON 输入的服务端点以及相应的实体类定义。 ```java @RestController @RequestMapping("/example") public class ExampleController { @PostMapping(value = "/create", consumes = "application/json") public ResponseEntity<String> create(@Valid @RequestBody User user){ return new ResponseEntity<>("User created successfully.", HttpStatus.CREATED); } } class User { private String name; private int age; // Getters and Setters omitted for brevity. } ``` 在此场景下,访问 `/swagger-ui.html#/example-controller/createUsingPOST_1` 页面可以看到针对 POST /example/create 方法的具体描述,其中包含了一个可以自由修改的大段 JSON 编辑区域用来模拟真实调用过程。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值