Что должно быть возвращено для Spring boot @RequestMapping, который использует JSON с продукцией, не определенной? - PullRequest
0 голосов
/ 16 октября 2018

Я вижу проблему, и я надеюсь на проверку работоспособности ... Я нахожусь на стороне пользовательского интерфейса, имеющей дело с возвратом из метода контроллера Spring Boot.Этот метод возвращает String, и его @RequestMapping имеет «потребления», определенные как JSON.Не определено ни одного «производит».

В пользовательском интерфейсе я вижу ошибку, потому что в заголовке ответа Content-Type указан как application / json, но это действительно строка, поэтому когдапытается проанализировать JSON, это не удается.

Предполагается ли, что Spring предполагает тип продукции JSON, потому что для ресурсов установлено значение JSON, а для продуктов не задано?Производит ли значение по умолчанию то значение, которое установлено для расхода, независимо от того, какой тип метода возвращается?

Вот метод, о котором идет речь, с удалением любых идентифицирующих деталей:

@ApiOperation(value = "Do the thing", notes = "The API does the thing", response = String.class)
@RequestMapping(value = "/do/{the}/thing", method = RequestMethod.POST, consumes = "application/json")
public String doTheThing(
        @ApiParam(value = "HttpHeaders parameter containing user authorization token.")
            @RequestHeader(value = AUTHORIZATION_HEADER_NAME) String authorization,
        @ApiParam(value = "Object ID of the existing thing.")
            @PathVariable String thingId,
        @ApiParam(value = "A map of properties for the thing to be created. This typically includes mandatory fields such as thing name and type.")
            @RequestBody Map<String, Object> plan,@RequestParam(value = "tagName", required = false) String tagName) {
    <Code to do the thing, and return a string>
    return response;
}

Затем,в окне разработчика пользовательского интерфейса, если я смотрю на заголовок ответа от этого метода, указывается тип содержимого JSON:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://127.0.0.1:9000
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control- 
Allow-Credentials,Access-Control-Allow-Methods
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Type: application/json;charset=UTF-8
Date: Tue, 16 Oct 2018 18:11:22 GMT
Expires: 0
Pragma: no-cache
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
X-Application-Context: bootstrap
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

1 Ответ

0 голосов
/ 16 октября 2018

Исходя из описания вашей проблемы, вам нужно вернуть json.Если вы вернете строку «Я тест», так как json будет таким же.Проблема возникает, когда ваше приложение является приложением spring-mvc.В этом случае он попытается разрешить его как представление вместо простого текста.

Решения:

  1. Аннотируйте ваш контроллер как @ RestController

  2. Добавьте @ResponseBody в ваш метод

Чтобы ответить на ваш первоначальный вопрос, Spring попытается выяснить, какой тип возвращать, основываясь на ваших зависимостях.Если он имеет зависимость от Spring-Web, он попытается разрешить представление.Если у вас есть @RestController, он выяснит это на основе зависимости от Джексона.

Если я не понял вашу реальную проблему, уточните ее и добавьте также зависимости.

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