我在spring boot mvc容器中有一个休息控制器
@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 公共类LoginController {
@RequestMapping("rest/login")
public String login() {
return Response.GRANTED.name();
}
public static enum Response {
GRANTED, DENIED;
}
}
带来我想要的结果,但我想要类型安全返回类型Response而不是String。
感谢您的帮助。
答案 0 :(得分:1)
@RestController
就像使用@Controller
注释的@ResponseBody
一样。也就是说,每个处理程序都使用@ResponseBody
隐式注释。对于String
以外的任何引用类型(以及其他一些引用类型),默认目标内容类型为JSON。
JSON中的6种数据类型是Object,Array,Number,String,true,false和null。你如何映射enum
常数?默认情况下,Jackson(支持默认JSON HttpMessageConverter
)将enum
常量序列化为JSON字符串。这可以说是最匹配的JSON数据类型。
您可以通过提供自己的JsonSerializer
@JsonSerialize(using = ResponseSerializer.class)
public static enum Response {
...
class ResponseSerializer extends JsonSerializer<Response> {
@Override
public void serialize(Response value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeRaw(value.name());
}
}
但我不推荐它,因为你不会生成有效的JSON。
您应该考虑其他人的建议并使用各种HTTP状态代码。