Джексон сериализатор на весенней загрузке переводит мои строки - PullRequest
0 голосов
/ 15 марта 2019

Я отправляю JSON в мой API следующим образом:

"{}" и я хочу, чтобы он интерпретировался как 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 ]

1 голос
/ 15 марта 2019

потому что вы объявляете тело как String @RequestBody String json

, что вы хотите

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, если введенные данные недопустимы.

0 голосов
/ 20 марта 2019

На самом деле @Consumes (MediaType.JSON_APPLICATION) - это аннотация JAX-RS, которая не учитывается при использовании аннотации SPring MVC.

Для решения этой проблемы не следует использовать

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

но я должен использовать:

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

Это решит мою проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...