Java 编写一个http post接口,怎样既支持jsonobject,也支持jsonarray入参,非string格式
时间: 2024-03-21 14:39:09 浏览: 47
要实现一个 Java 的 HTTP POST 接口,既支持 JSONObject,又支持 JSONArray 入参,非 String 格式,你可以使用 Spring MVC 框架,通过使用 @RequestBody 注解,让 Spring 自动将请求体中的 JSON 数据转换成相应的对象类型,具体实现步骤如下:
1. 导入 Spring MVC 框架的相关依赖。
2. 在 Spring 的配置文件中添加配置,启用 Spring MVC 相关功能。
3. 编写 Controller 层代码,定义一个 POST 请求处理方法,使用 @RequestBody 注解,将请求体中的 JSON 数据转换成相应的对象类型。
4. 在 Controller 层方法中处理请求,返回相应的响应结果。
下面是一个使用 Spring MVC 实现的 HTTP POST 接口,支持 JSONObject 和 JSONArray 入参的示例代码:
1. 导入相关依赖
```xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
```
2. 在 Spring 的配置文件中添加配置
```xml
<!-- 启用 Spring MVC 相关功能 -->
<mvc:annotation-driven />
```
3. 编写 Controller 层代码
```java
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
public class PostJsonController {
@PostMapping(value = "/post", consumes = {MediaType.APPLICATION_JSON_VALUE})
public List<String> postJson(@RequestBody Object requestBody) {
List<String> result = new ArrayList<>();
if (requestBody instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) requestBody;
result.add(jsonObject.getString("name"));
result.add(String.valueOf(jsonObject.getInt("age")));
} else if (requestBody instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) requestBody;
for (int i = 0; i < jsonArray.length(); i++) {
result.add(jsonArray.getString(i));
}
}
return result;
}
}
```
4. 测试 HTTP POST 接口
```java
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class PostJsonTest {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
// 测试 JSONObject 入参
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "John");
jsonObject.put("age", 30);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> requestEntity = new HttpEntity<>(jsonObject.toString(), headers);
ResponseEntity<List> responseEntity = restTemplate.postForEntity("http://localhost:8080/post", requestEntity, List.class);
List<String> result = responseEntity.getBody();
System.out.println(result);
// 测试 JSONArray 入参
JSONArray jsonArray = new JSONArray();
jsonArray.put("apple");
jsonArray.put("banana");
jsonArray.put("orange");
headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
requestEntity = new HttpEntity<>(jsonArray.toString(), headers);
responseEntity = restTemplate.postForEntity("http://localhost:8080/post", requestEntity, List.class);
result = responseEntity.getBody();
System.out.println(result);
}
}
```
注意:上述代码仅供参考,实际应用中需要根据具体需求进行修改。
阅读全文