当前位置: 首页 > 知识库问答 >
问题:

接收作为JSON对象的数据

朱炳
2023-03-14

在我的控制器类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时,控制器工作正常。

<servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

正如评论中所建议的那样,我错误地使用了JSON。但是,即使使用了正确的代码,如{“key”:“value”},代码也不能正常工作。

共有1个答案

岳俊晖
2023-03-14

据我所知,jersey使用Jackson的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";
}
 类似资料:
  • 本文向大家介绍Spring mvc 接收json对象,包括了Spring mvc 接收json对象的使用技巧和注意事项,需要的朋友参考一下 本文通过代码实例介绍spring mvc 接收json数据的方法,具体详情如下所示: 接收JSON 使用 @RequestBody 注解前台只需要向 Controller 提交一段符合格式的 JSON,Spring 会自动将其拼装成 bean。 1)在上面的项

  • 本文向大家介绍Springmvc发送json数据转Java对象接收,包括了Springmvc发送json数据转Java对象接收的使用技巧和注意事项,需要的朋友参考一下 1、导包 基于maven 2、jsp代码 3、控制器代码 4、配置json转换器 如果不使用注解驱动<mvc:annotation-driven />,就需要给处理器适配器配置json转换器 在springmvc.xml配置文件中,

  • 我想发送一个以json数据为主体的POST请求到一个REST api,接收一个json响应。我使用的是JsonObjectRequest,我理解在JsonObjectRequest构造函数中设置一个jsonObject将请求作为POST发送,否则将作为GET发送。我试着在postman上执行这个请求,它工作得很好,但是在android上,它给了我错误405(方法不允许)。REST API还要求我将

  • 我有一个Dto类,它将以为数据类型设置一个值。 以下是错误:

  • 这是这个问题的后续问题: 使用postman发送嵌套json对象 在邮递员端,我发送一个POST消息,正文设置为raw,内容类型设置为Json(application/Json)。身体本身是: 发送此请求时,接收参数中的为空...为什么会这样?

  • 问题内容: 我有以下签名的方法: 我正在尝试使用jQuery从javascript调用它,如下所示: 我是否缺少某些东西可以使它正常工作? 问题答案: javascript对象文字中存在语法错误。数组中的两个键/值对应与“名称”(例如:“ myProperty”)一起分配给命名属性。 );