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

Spring Boot com.fasterxml.jackson.core.jsonParseException:无法识别的令牌

宋宏儒
2023-03-14

我使用一个Spring Boot项目,我希望在程序启动后执行多个post请求,而不是在程序启动后手动使用cURL。其目的是在存储器中存储一些数据,并使平台为进一步的操作做好准备。我使用的原始curl命令(运行良好),

$ curl -i -X POST -H "Content-Type:application/json" -d "{\"name_of_doctor\" : \"Monika2\", \"price\": \"12.5\"}" http://localhost:8080/api/v1/appointments/createAppointment 
@PostMapping(value = "/createAppointment", consumes = "application/json;charset=UTF-8", produces = "application/json;charset=UTF-8")
    public ResponseEntity<Appointment> create(@RequestBody Appointment appointment) {

        java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime());
        java.sql.Time time = new java.sql.Time(Calendar.getInstance().getTime().getTime());

        appointment.setAppointment_date(date);
        appointment.setCraeted_at(time);

        // we create the appointment, because, the doctor is available
        appointment.setStatus(new Status(true));
//        appointment.setStatus(true);

        service.save(appointment);
        return ResponseEntity.status(HttpStatus.CREATED).body(appointment);
    }
@SpringBootApplication
@EnableTransactionManagement
public class AppointmentApplication {

    public static void main(String[] args) {



        System.out.println("\n\nAppointment Manager\n\n");
        SpringApplication.run(AppointmentApplication.class, args);



        HttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost("http://localhost:8080/api/v1/appointments/createAppointment");


        List<NameValuePair> arguments = new ArrayList<>(2);

        arguments.add(new BasicNameValuePair("name_of_doctor", "Monika"));
        arguments.add(new BasicNameValuePair("price", "12.5"));

        try {
            post.setEntity(new UrlEncodedFormEntity(arguments));
//post.addHeader("content-type", "application/x-www-form-urlencoded");
        post.setHeader("Accept", "application/json");
        post.setHeader("Content-type", "application/json");

            HttpResponse response = client.execute(post);

            System.out.println(EntityUtils.toString(response.getEntity()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
{"timestamp":"2019-02-09T06:45:36.393+0000","status":400,"error":"Bad Request","message":"JSON parse error: Unrecognized token 'name_of_doctor': was expecting 'null', 'true', 'false' or NaN; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'name_of_doctor': was expecting 'null', 'true', 'false' or NaN\n at [Source: (PushbackInputStream); line: 1, column: 16]","path":"/api/v1/appointments/createAppointment"}

如何在此方案中为POST调用正确设置媒体数据?

共有1个答案

全冥夜
2023-03-14

下面的代码将值添加为请求参数。

    post.setEntity(new UrlEncodedFormEntity(arguments));

考虑到API要求在请求正文中包含JSON内容,您需要使用StringEntity而不是UrlenCodedFormEntity

    post.setEntity(new StringEntity("{ \"name_of_doctor\": \"\", \"price\": \"12.5\" }", Charset.forName("UTF-8")));
 类似资料:
  • 问题内容: 好的,我正在Windows(7)上运行节点。使用npm,我刚刚将模块安装到d:\目录。因此,我的文件结构如下所示: 但是,当我在此“ myproject”目录中时,例如,我似乎无法运行“ express”: 我做错什么了吗? 问题答案: 我的猜测是您没有全局安装Express。您可以使用以下命令(请参阅http://expressjs.com/guide.html)在全球范围内安装Ex

  • 这是我写的,只是为了启动我的discord机器人,但是每当我尝试使用这个命令时?嗨,我收到了错误信息 忽略命令无异常:discord.ext.commands.errors.命令没有找到:命令"hi"没有找到" 我试过几次,但我是新手,没有任何效果。 下面的答案有助于解决这个问题,这是我的新代码,因为机器人现在不会给出错误消息,但不会响应命令

  • 我通过RestTemplate调用一个endpoint,如下所示: 我已经验证了对象中的JSON字符串是有效的,方法是将其复制并在对同一endpoint的cURL请求中使用,没有任何错误。在此请求中也使用了相同的头和授权令牌。 当我执行POST时,返回以下错误: 我的和头都设置为。通过检查来自cURL的输出,我看到响应体中没有汉字。 响应标头如下: 当我将设置为或时发出请求,响应是中文字符: 我希

  • 我是discord API的新手,我很难弄清楚为什么我的命令不能被识别。我已经通读了文档,但我不确定该去哪里看。任何帮助都将不胜感激。不要介意硬编码的列表。我计划将来改变这一点。现在我只想确保它能正常工作。

  • 无论何时运行docker构建,我都会得到: “msbuild”不被识别为内部或外部命令,可操作程序或批处理文件。并且“nuget.exe”不被识别为内部或外部命令,可操作程序或批处理文件。 但是,当我从CMD运行msbuild或nuget恢复时,它自己可以正常工作。我已经添加了系统变量/路径的路径

  • 我有以下序列