在我的控制器类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”}
,代码也不能正常工作。
据我所知,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”)一起分配给命名属性。 );