Spring Boot上的Jackson序列化程序正在对我的字符串进行字符串化

时间:2019-03-15 15:54:33

标签: java spring-boot jackson

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

"{}",我希望它将被解释为JSON而不是字符串。因为该API在我的字符串中添加了双引号,并且有效负载变为

""{}""

我使用了@Consumes(MediaType.JSON_APPLICATION),它不起作用...

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

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

}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

因为您通过@RequestBody String json将主体声明为String

您想要的是

import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.http.ResponseEntity;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.OK;


public ResponseEntity delete(@RequestBody JsonNode json) {

 if (!VeryCustomService.isValid(json)) {
     throw new ResponseStatusException(BAD_REQUEST, "Invalid json: " + json);

 return new ResponseEntity("Success", OK);
  }
}

我还建议对响应类型使用ResponseEntity而不是String,如果输入无效,则抛出ResponseStatusException。

答案 1 :(得分:0)

实际上,@Consumes(MediaType.JSON_APPLICATION)是使用SPring MVC注释时未考虑的JAX-RS注释。

要解决此问题,我不应该使用

PORT=3000
DATABASE_URL=mongodb://localhost:27017/PersonalityTest
JWT_SECRETKEY=asfdawetq312etr%!@$qe

但我应该使用:

mongoose.connect("mongodb://localhost:27017/PersonalityTest", { useNewUrlParser: true, useCreateIndex: true });

这解决了我的问题