社区首页 >问答首页 >尝试使用从POST读取JSON字符串

尝试使用从POST读取JSON字符串
EN

Stack Overflow用户
提问于 2015-03-27 20:26:21
回答 6查看 298.7K关注 0票数 93

我正在使用Spring的最新版本通过Restful服务读取一个示例JSON .

这是我的pom.xml:

代码语言:javascript
代码运行次数:0
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"       
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/maven-v4_0_0.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>myservice</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.7</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-webmvc</artifactId>
        </dependency>
        <dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
        <repository>
            <id>org.jboss.repository.releases</id>
            <name>JBoss Maven Release Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

</project>

这是我的web服务代码:

代码语言:javascript
代码运行次数:0
复制
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/myservice")
public class BaseService {  

    @RequestMapping(value="/process", method = RequestMethod.POST)
    public void process(@RequestBody String payload) throws Exception {
        System.out.println(payload);
    }
}

当我使用以下命令调用它时:

代码语言:javascript
代码运行次数:0
复制
curl -H "Accept: application/json" -H "Content-type: application/json" 
-X POST -d '{"name":"value"}' http://localhost:8080/myservice/process

我收到以下错误消息:

代码语言:javascript
代码运行次数:0
复制
{"timestamp":1427515733546,"status":400,
 "error":"Bad Request",

"exception":
"org.springframework.http.converter.HttpMessageNotReadableException","
 message":
 "Could not read JSON: Can not deserialize instance of java.lang.String
  out of START_OBJECT token\n at 

 [Source: java.io.PushbackInputStream@8252f; line: 1, column: 1]; 
  nested    exception is com.fasterxml.jackson.databind.JsonMappingException:
  Can not deserialize instance of java.lang.String out of START_OBJECT token\n    
  at [Source: java.io.PushbackInputStream@8252f; line: 1, column: 1]",
  "path":"/myservice/process"

我唯一要做的就是传入一些有效的JSON (通过curl作为字符串),并查看字符串有效负载是否以{"name":"value"}的形式进入进程方法。

我到底做错什么了?

谢谢你抽出时间读这篇..。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-03-29 06:23:39

我认为使用JSON最简单、最方便的方法是使用类似于JSON的Java类:https://stackoverflow.com/a/6019761

但是,如果不能使用Java类,则可以使用这两种解决方案之一。

解决方案1: --您可以从控制器接收Map<String, Object>

代码语言:javascript
代码运行次数:0
复制
@RequestMapping(
    value = "/process", 
    method = RequestMethod.POST)
public void process(@RequestBody Map<String, Object> payload) 
    throws Exception {

  System.out.println(payload);

}

利用您的请求:

代码语言:javascript
代码运行次数:0
复制
curl -H "Accept: application/json" -H "Content-type: application/json" \
-X POST -d '{"name":"value"}' http://localhost:8080/myservice/process

解决方案2:,否则您可以将POST有效负载作为String获得

代码语言:javascript
代码运行次数:0
复制
@RequestMapping(
    value = "/process", 
    method = RequestMethod.POST,
    consumes = "text/plain")
public void process(@RequestBody String payload) throws Exception {

  System.out.println(payload);

}

然后根据需要解析字符串。注意,必须在控制器上指定consumes = "text/plain"。在这种情况下,您必须用Content-type: text/plain更改请求。

代码语言:javascript
代码运行次数:0
复制
curl -H "Accept: application/json" -H "Content-type: text/plain" -X POST \
-d '{"name":"value"}' http://localhost:8080/myservice/process
票数 172
EN

Stack Overflow用户

发布于 2020-03-17 06:40:37

要在Spring中接收任意Json,只需使用Jackson的JsonNode即可。自动配置适当的转换器。

代码语言:javascript
代码运行次数:0
复制
    @PostMapping(value="/process")
    public void process(@RequestBody com.fasterxml.jackson.databind.JsonNode payload) {
        System.out.println(payload);
    }
票数 21
EN

Stack Overflow用户

发布于 2017-11-16 23:50:16

添加到Andrea的解决方案中,例如,如果要传递一个JSON数组

代码语言:javascript
代码运行次数:0
复制
[
    {"name":"value"},
    {"name":"value2"}
]

然后需要设置,如下所示:

代码语言:javascript
代码运行次数:0
复制
@RequestMapping(
    value = "/process", 
    method = RequestMethod.POST)
public void process(@RequestBody Map<String, Object>[] payload) 
    throws Exception {

    System.out.println(payload);

}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29313687

复制
相关文章
json转字符串 python_Python读取json
按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化;反之,从文件的字节恢复到内存,就是反序列化; python中与json格式的文件,序列化与反序列化用到的是json模块
全栈程序员站长
2022/09/19
7610
使用Python读取,写入和解析JSON
JSON是用于数据交换的轻量级数据格式,可以很容易地被人类读取和写入,也可以由机器轻松解析和生成。它是一种完全独立于语言的文本格式。为了处理JSON数据,Python有一个名为的内置包json。
用户7466307
2020/07/02
43.6K0
使用Python读取,写入和解析JSON
[linux] curl 命令post json数据
curl经常使用的命令,想要post json类型的数据,要注意header头和data数据
唯一Chat
2021/07/29
4.2K0
js读取本地json_vue读取本地json文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/04
13.1K0
js读取本地json文件_jquery读取本地json文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/04
21.6K0
js读取本地json文件_jquery读取本地json文件
使用cJSON解析JSON字符串
我们在使用JSON格式时,如果只是处理简单的协议,可以依据JSON格式,通过对字符串的操作来进行解析与创建。然而随着协议逐渐复杂起来,经常会遇到一些未考虑周全的地方,需要进一步的完善解析方法,此时,使用比较完善的JSON解析库的需求就提出来了。
全栈程序员站长
2022/09/07
1.8K0
json字符串使用注意问题
json本身是字符串,即 json字符串 js使用 要把 json字符串 转为  javascript对象 json字符串转为js对象的方法: jquery的parseJSON var str='[{"name":"cxh","sex":"man"},{"name":"cxh1","sex":"man1"}]'; var obj = $.parseJSON(str); obj即为获得js对象,则此后可以获取该js对象相关的属性值。 相关方法参考
蓓蕾心晴
2018/04/12
6760
使用cJSON创建JSON字符串
使用cJSON创建JSON字符串     在Linux下,使用C语言编程,开始JSON字符串的创建。我们还是一步步来,逐渐由简单到复制。   1,下载源码 可以从如下网站来下载:https://sourceforge.net/projects/cjson/ 。 2,包含cJSON的源码 下载下来,解压后,从里面找到两个文件(cJSON.c、cJSON.h),复制到我们的工程里面。只需在函数中包含头文件(#include “cJSON.h”),然后和cJSON.c一起编译即可使用。 3,创建一个键值对  
_gongluck
2018/03/08
4.6K0
使用cJSON解析JSON字符串
JSON学习-使用cJSON解析 使用cJSON解析JSON字符串 一、为何选择cJSON          我们在使用JSON格式时,如果只是处理简单的协议,可以依据JSON格式,通过对字符串的操作来进行解析与创建。然而随着协议逐渐复杂起来,经常会遇到一些未考虑周全的地方,需要进一步的完善解析方法,此时,使用比较完善的JSON解析库的需求就提出来了。          基于方便引用的考虑,我们希望这个JSON解析库是用C语言实现的。同时,为了避免太过复杂的C源码包含关系,希望最好是一个C文件来实现。通过
_gongluck
2018/03/08
18.7K1
【python】读取json文件
最近要打个比赛,在处理数据的时候,发现数据竟然是json文件的,于是上网查了下,展示给大家O.O
zenRRan
2018/07/25
8.7K0
【python】读取json文件
webpack json_vue读取json文件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169235.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
2.5K0
webpack json_vue读取json文件
Java 读取 json文件
和this.getClass().getClassloader().getResource("") 区别??
ydymz
2018/09/10
4.6K0
Retrofit进行post提交json数据
引入retrofit相关依赖 <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>retrofit</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>converter-jackson</artifactId> <version>2.4.0</version> </dependency>
24-丰总
2019/06/11
2.1K0
Retrofit进行post提交json数据
postman使用教程2-发 post 请求(json和urlencoded)
使用 postman 发送 http 协议 post 请求,两种请求参数类型application/json 和 application/x-www-from-urlencoded。
上海-悠悠
2021/05/17
9.8K1
postman使用教程2-发 post 请求(json和urlencoded)
httpclient post发送json数组并解决json乱码问题
业务: 客户端发送json数据,服务端进行解析 client发送json格式: {"data":[{"name":"1;,a","id_no":"222,a","cellphone":"123141a","abode_detail":"213,a","emp_add":"werew3a","app_no":"111111111111a","create_time":"11a"},{"name":"张三","id_no":"null","cellphone":"null","abode_detai
shengjk1
2018/10/24
4.2K0
json文件的读取_c语言文件读取
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。有关于json的相关信息,可参考:json百度百科。
全栈程序员站长
2022/11/07
5.6K0
json文件的读取_c语言文件读取
python 读取与存储json
官方文档:http://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html
py3study
2020/01/13
1.7K0
php socket 发送HTTP请求 POST json
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112663.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
2.4K0
点击加载更多

相似问题

尝试使用springboot从POST请求正文读取嵌套JSON时获取null

182

从post中读取json

11

使用PHP从HTTP POST读取JSON (Typeform)

115

从POST中发布读取JSON

21

从http post读取json结果

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文