如何从Spring Web应用程序返回一个字符串作为有效的JSON?

use*_*895 7 java spring json spring-mvc

我有一个我的REST Web服务应用程序的Spring端点,我想返回一个字符串:

"Unauthorized: token is invalid"
Run Code Online (Sandbox Code Playgroud)

但我在前端的javascript扼杀了这个:

JSON.parse("Unauthorized: token is invalid") //Unexpected token U
Run Code Online (Sandbox Code Playgroud)

如何让我的应用程序返回有效的JSON字符串?这是我目前的代码:

@RequestMapping(value="/401")
public ResponseEntity<String> unauthorized() {
    return new ResponseEntity<String>("Unauthorized: token is invalid", HttpStatus.UNAUTHORIZED);
}
Run Code Online (Sandbox Code Playgroud)

Nei*_*gan 13

返回地图.

Map<String,String> result = new HashMap<String,String>();

result.put("message", "Unauthorized...");

return result;
Run Code Online (Sandbox Code Playgroud)

你不需要返回一个ResponseEntity,你可以直接返回一个POJO或集合.@ResponseBody如果要返回POJO或集合,请添加到处理程序方法.

另外,我会说这是更好地使用forward了redirect错误.

  • 也许`Collections.singletonMap("message","Unauthorized");`在这种情况下会更好,因为只需要返回一条消息.无论如何+1 (5认同)

Bil*_*ill 8

@Neil提供了一个比你想要完成的更好的替代方案.

然而,在回答所提出的问题时,你很接近.

下面修改的代码应该生成有效的JSON响应

@RequestMapping(value="/401")
public ResponseEntity<String> unauthorized() {

    String json = "[\"Unauthorized\": \"token is invalid\"]";
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setContentType(MediaType.APPLICATION_JSON);
    return new ResponseEntity<String>(json, responseHeaders, HttpStatus.UNAUTHORIZED);
}
Run Code Online (Sandbox Code Playgroud)