接收json数据java_java – 以JSON对象的形式接收数据

我在我的控制器类a中有以下方法:

import javax.json.Json;

import javax.servlet.http.HttpServletRequest;

import javax.ws.rs.Consumes;

import javax.ws.rs.POST;

import javax.ws.rs.Path;

import javax.ws.rs.Produces;

import javax.ws.rs.core.Context;

import javax.ws.rs.core.MediaType;

@POST

@Consumes({MediaType.APPLICATION_JSON})

@Produces({MediaType.TEXT_PLAIN})

@Path("/message")

public String postMessage(Json json,

@Context HttpServletRequest request) {

System.out.println("message");

return "ok";

}

问题是当我通过执行curl发送POST时:

curl -H "Content-Type: application/json" -X

POST -d '{"key":"value"}' http://localhost:8080/message

我得到HTTP状态415 – 不支持的媒体类型,好像我没有发送JSON.当我将Json json更改为String body时,控制器工作正常.

在web.xml中我有:

jersey-serlvet

org.glassfish.jersey.servlet.ServletContainer

com.sun.jersey.api.json.POJOMappingFeature

true

1

编辑

我在评论中建议错误的JSON.但是,即使使用像{“key”:“value”}这样的正确代码,代码也无效.

解决方法:

据我所知,泽西使用杰克逊的ObjectMapper来反序列化.我认为问题可能是对象映射器不知道如何将您的请求映射到javax.json.Json对象,这是一个简单的测试:

import javax.json.Json;

import com.fasterxml.jackson.databind.ObjectMapper;

// (...)

ObjectMapper mapper = new ObjectMapper();

Json json = mapper.readValue("{\"key\": \"value\"}", Json.class);

这会产生一个例外:

UnrecognizedPropertyException: Unrecognized field "key" (class javax.json.Json)

我认为你应该创建一个POJO而不是原始的json对象,例如:

class MyMessage {

public String key; //for simplicity, you probably will use accessor methods

}

同样的测试工作正常:

MyMessage msg = mapper.readValue("{\"key\": \"value\"}", MyMessage.class);

然后您的控制器方法应如下所示:

@POST

@Consumes({MediaType.APPLICATION_JSON})

@Produces({MediaType.TEXT_PLAIN})

@Path("/message")

public String postMessage(MyMessage msg) {

System.out.println(msg.key);

return "ok";

}

标签:json,java

来源: https://codeday.me/bug/20190701/1347410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想知道如何使用PHP接收JSON POST数据,下面是一个简单的示例代码: ```php <?php // 获取POST请求中的JSON数据 $json = file_get_contents('php://input'); // 将JSON数据转换为PHP数组 $data = json_decode($json, true); // 打印PHP数组 print_r($data); ?> ``` 在上面的代码中,我们首先使用`file_get_contents()`函数从`php://input`中获取POST请求中的JSON数据,然后使用`json_decode()`函数将JSON数据转换为PHP数组,最后使用`print_r()`函数打印PHP数组。 如果您想要在接收到POST请求后返回JSON数据,可以使用如下代码: ```php <?php // 获取POST请求中的JSON数据 $json = file_get_contents('php://input'); // 将JSON数据转换为PHP数组 $data = json_decode($json, true); // 创建一个包含返回数据的PHP数组 $response = array( 'status' => 'success', 'message' => 'Received JSON data successfully!', 'data' => $data ); // 将PHP数组转换为JSON字符串 $json_response = json_encode($response); // 设置HTTP响应头 header('Content-Type: application/json'); // 输出JSON字符串 echo $json_response; ?> ``` 在上面的代码中,我们首先使用`file_get_contents()`函数从`php://input`中获取POST请求中的JSON数据,然后使用`json_decode()`函数将JSON数据转换为PHP数组,接着创建一个包含返回数据的PHP数组,然后使用`json_encode()`函数将PHP数组转换为JSON字符串,最后设置HTTP响应头并输出JSON字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值