Java 无法将JSON值转换为System.String

Java 无法将JSON值转换为System.String,java,spring-boot,resttemplate,Java,Spring Boot,Resttemplate,我面临一个发帖请求的问题。这非常简单,实际上,我只需要在应用程序主体中发送一段json格式的日期。然而,我不断得到以下信息: The JSON value could not be converted to System.String 完整的错误消息如下所示: 400 Bad Request: [{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":&q

我面临一个发帖请求的问题。这非常简单,实际上,我只需要在应用程序主体中发送一段json格式的日期。然而,我不断得到以下信息:

The JSON value could not be converted to System.String
完整的错误消息如下所示:

400 Bad Request: [{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"xxx","errors":{"$.reconciliationDate":["The JSON value could not be converted to System.String. Path: $.fooDate | LineNumber: 0 | BytePositionInLine: 23."]}}]
我尝试使用LinkedMultiValueMap而不是JsonObject,但它也不起作用。从错误中,我假设我发送的json有问题。。。数据是:{
“fooDate”:“2021-05-11”}
。完整的代码是:

public void foo(String fooDate){
        try{
            Token token = this.GetAccessToken();
            if(token == null){
                throw new Exception("Access token was null");
            }

            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            headers.set("Authorization", "Bearer " + token.getAccess_token());

            JsonObject body = Json.createObjectBuilder()
                    .add("fooDate", fooDate).build();


            HttpEntity<Object> entity = new HttpEntity<>(body, headers);
            ResponseEntity<String> result = restTemplate.exchange(properties.getUri(),
                    HttpMethod.POST,
                    entity,
                    String.class);

            if(result.getStatusCode() != HttpStatus.OK){
                throw new Exception(String.format("Endpoint returned an unexpected status code : %d",
                        result.getStatusCode()));
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }
public void foo(字符串fooDate){
试一试{
Token Token=this.GetAccessToken();
if(标记==null){
抛出新异常(“访问令牌为空”);
}
HttpHeaders=新的HttpHeaders();
setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.set(“授权”、“承载者”+令牌.getAccess_token());
JsonObject body=Json.createObjectBuilder()
.add(“fooDate”,fooDate).build();
HttpEntity实体=新的HttpEntity(主体、标题);
ResponseEntity结果=restTemplate.exchange(properties.getUri(),
HttpMethod.POST,
实体,
字符串(类);
if(result.getStatusCode()!=HttpStatus.OK){
抛出新异常(String.format(“终结点返回意外的状态代码:%d”),
result.getStatusCode());
}
}捕获(例外e){
e、 printStackTrace();
}
}

Gson应适用于这种类型的转换。Gson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象

编辑 我现在还没有代码片段,很快就会与大家分享,但现在你可以试试下面的方法,看看它是否有效<代码>Gson Gson=新Gson();字符串json=gson.toJson(obj)在这种情况下,它将类似于:

JsonObject body = Json.createObjectBuilder()
                    .add("fooDate", gson.toJson(fooDate)).build();

对不起,如果我误解了你的要求。

事实上,答案很简单。在尝试修复此问题时,我尝试向标题中添加以下内容:

headers.set("Content-Type", "application/json");
这并没有改变行为。但是,通过添加以下内容,该错误得到了修复:

headers.setContentType(MediaType.APPLICATION_JSON);

当遇到类似问题时,希望这对其他方面有所帮助。

在这种情况下,我没有对象,因为它是一个简单的信息,只有一个键和一个值。您能否简单介绍一下使用gson解决方案的工作原理?