我正在向我的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
}
有什么想法吗?
答案 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 });
这解决了我的问题