考虑我的休息服务:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response authenticateUser(CredentialsDTO credentialsDTO) {
try {
authService.login(credentialsDTO.getUsername(), credentialsDTO.getPassword());
} catch (WrongCredentialsException e) {
return Response.status(Status.UNAUTHORIZED).entity("WrongCredentialsException").build();
} catch (AccountLockedException e) {
return Response.status(Status.UNAUTHORIZED).entity("AccountLockedException").build();
}
String token = issueToken(credentialsDTO.getUsername());
return Response.ok().header(AUTHORIZATION, "Bearer " + token).build();
}
是否可以在实体中返回String(例如“AccountLockedException”),虽然我将application / json声明为内容类型?
在发送回来之前,我是否必须将错误消息包装在Json对象中?
当我尝试将响应解析为Json时,我在客户端遇到问题,但只有在发生错误时才会返回文本。
答案 0 :(得分:0)
你绝对应该用JSON包装你的字符串。 在这种情况下,这就是您的代码的外观:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response authenticateUser(CredentialsDTO credentialsDTO) {
try {
authService.login(credentialsDTO.getUsername(), credentialsDTO.getPassword());
} catch (WrongCredentialsException e) {
return Response.status(Status.UNAUTHORIZED)
.entity(new JSONObject().put("message", "WrongCredentialsException").toString())
.build();
} catch (AccountLockedException e) {
return Response.status(Status.UNAUTHORIZED)
.entity(new JSONObject().put("message", "AccountLockedException").toString())
.build();
}
String token = issueToken(credentialsDTO.getUsername());
return Response.ok().header(AUTHORIZATION, "Bearer " + token).build();
}
或者您甚至可以为这些异常创建一个单独的类,并使用您的默认JSON序列化库将它们序列化。