Java Spring boot上的Jackson serialiser正在串接我的字符串

Java Spring boot上的Jackson serialiser正在串接我的字符串,java,spring-boot,jackson,Java,Spring Boot,Jackson,我正在向我的API发送JSON,如下所示: {}我希望它将被解释为JSON而不是字符串。因为API向我的字符串添加了一个双引号,所以有效负载变为 ""{}"" 我使用了@ConsumesMediaType.JSON_应用程序,但它不起作用 @DeleteMapping(value = "/delete") public String delete(@RequestBody String json) { JSONObject obj = new JSONObject(json); //This

我正在向我的API发送JSON,如下所示:

{}我希望它将被解释为JSON而不是字符串。因为API向我的字符串添加了一个双引号,所以有效负载变为

""{}""
我使用了@ConsumesMediaType.JSON_应用程序,但它不起作用

@DeleteMapping(value = "/delete")
public String delete(@RequestBody String json) {

JSONObject obj = new JSONObject(json); //This line throws exception 

}

有什么想法吗?

因为@RequestBody String json将主体声明为字符串

你想要的是

导入com.fasterxml.jackson.databind.JsonNode; 导入org.springframework.http.ResponseEntity; 导入静态org.springframework.http.HttpStatus.BAD_请求; 导入静态org.springframework.http.HttpStatus.OK; 公共责任delete@RequestBodyJsonNode json{ 如果!VeryCustomService.isValidjson{ 抛出新的ResponseStatusExceptionBAD_请求,无效json:+json; 返回新的ResponseEntitySuccess,OK; } }
我还建议对响应类型使用ResponseEntity而不是字符串,如果输入无效,则抛出ResponseStatusException。

事实上,@consumersMediaType.JSON_应用程序是一个JAX-RS注释,在使用SPring MVC注释时没有考虑到

为了解决这个问题,我不应该使用

@Consumes(MediaType.JSON_APPLICATION)
@DeleteMapping(value = "/delete")
但我应该使用:

@DeleteMapping(value = "/delete", consumes = MediaType.JSON_APPLICATION)

这解决了我的问题

是的,谢谢,使用JsonNode而不是字符串是一个更好的解决方案,它解决了我的问题。。。谢谢