Spring Boot @RequestMapping使用未定义的JSON产生的返回结果应该是什么?

时间:2018-10-16 18:25:54

标签: java http spring-boot

我看到一个问题,希望进行完整性检查……我在UI端处理Spring Boot控制器方法的返回。该方法返回一个String,其@RequestMapping具有定义为JSON的“ consums”。没有定义“农产品”。

在UI端,我看到一个错误,因为在响应标头中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;
}

然后,在UI开发人员窗口中,如果我查看来自该方法的响应的标头,则表明内容类型为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 :(得分:0)

根据您的问题描述,您需要返回json。 如果您将返回字符串“ I is a test”,因为json将是相同的。当您的应用程序是spring-mvc应用程序时,问题就来了。 在这种情况下,它将尝试将其解析为视图而不是纯文本。

解决方案:

  1. 将控制器注释为@RestController

  2. 在您的方法中添加@ResponseBody

为回答您的第一个问题,spring将尝试根据所包含的依赖关系来确定要返回的类型。如果它对spring-web有依赖性,它将尝试解析视图。 如果您有@RestController,它将根据杰克逊的依赖关系来解决这个问题。

如果我不了解您的实际问题,请进行说明并添加依赖项。