【发布时间】:2014-07-07 19:51:57
【问题描述】:
我在 spring boot mvc 容器中有一个 rest 控制器
@RestController
public class LoginController {
@RequestMapping("rest/login")
public Response login() {
return Response.GRANTED;
}
public static enum Response {
GRANTED, DENIED;
}
}
在请求休息资源后,我必须使用双引号来检查返回类型。如何避免双引号?
$http.post("rest/login", $scope.data).success(function(data) {
if (data === "\"GRANTED\"") {
alert("GRANTED")
} else if (data === "DENIED") {
alert("DENIED")
};
@RestController 公共类登录控制器 {
@RequestMapping("rest/login")
public String login() {
return Response.GRANTED.name();
}
public static enum Response {
GRANTED, DENIED;
}
}
带来我想要的结果,但我想要类型安全的返回类型 Response 而不是 String。
感谢您的帮助。
【问题讨论】:
-
您是否考虑过返回 HTTP 状态码?
-
我做到了。它类似于带有 null 的代码。一方面,您将 null 解释为没有值。另一方面,它可能是意外的运行时错误。我想要一个总是返回成功状态码的架构。如果发生了真正的意外情况,我将收到一个真正的错误状态代码,我可以在 javascript 控制台上看到它。
-
存在许多不同的状态,这是有充分理由的。服务器中的意外运行时错误将导致错误 500 的响应。返回错误 400(错误请求)或 401(未经授权)以清楚地表明实际的功能错误。这与依赖 null 来表示错误完全不同,这就是应该使用 HTTP 的方式。
-
控制器正在返回 JSON,因此您应该使用
JSON.parse(data)解析它。这将返回“GRANTED”或“DENIED”,因此alert(JSON.parse(data))的行为与您的代码相同。