我正在使用java和Spring MVC,在应用程序的第一个版本中,我使用ResponseEntity<String>
进行响应,并且我遇到了错误并且错误地返回了类似return new ResponseEntity<String>(httpErrors.toString(), responseHeaders, HttpStatus.BAD_REQUEST);
的内容是正确的return new ResponseEntity<String>(loginResponse.toString(), responseHeaders, HttpStatus.OK);
。但是现在我相信theres是一种更好的方法,不使用toString()
方法,根据这样的情况返回特定对象:
@RestController
@RequestMapping("/user")
public class LoginController {
/** The login service to validate the user. */
@Autowired
LoginService loginService;
@RequestMapping(value = "/login", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<?> validate(@RequestBody final UserLog login) {
WebUser webUser = loginService.getUserDetails(login.getLogin(), login.getPassword());
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.APPLICATION_JSON);
if (webUser == null) {
HttpErrors httpErrors = new HttpErrors(ApiCommonResources.ERROR_402, "error" + "." + ApiCommonResources.ERROR_402, ApiCommonResources.ERROR_402_TEXT);
return new ResponseEntity<HttpErrors>(httpErrors, responseHeaders, HttpStatus.BAD_REQUEST);
}
List<Account> userAccounts = loginService.getMerchantAccounts(webUser.getMerchantId());
// Json Web Token builder
token = "b7d22951486d713f92221bb987347777";
LoginResponse loginResponse = new LoginResponse(ApiCommonResources.SUCCESS_REQUEST_CODE, token);
return new ResponseEntity<LoginResponse>(loginResponse, responseHeaders, HttpStatus.OK);
}
}
问题是我如何创建一个可以包装LoginResponse
和HttpErrors
对象类型的类,并将其作为ResponseEntity中的返回对象发送到?
:
LoginResponse类:
public class LoginResponse{
public LoginResponse(Integer statusCode, String token){
this.setStatusCode(statusCode);
this.setToken(token);
}
private String token;
private Integer statusCode;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Integer getStatusCode() {
return statusCode;
}
public void setStatusCode(Integer statusCode) {
this.statusCode = statusCode;
}
@Override
public String toString() {
StringBuilder jsonResponse = new StringBuilder();
jsonResponse.append("{");
jsonResponse.append("\"statusCode\":");
jsonResponse.append("\"" + statusCode + "\",");
jsonResponse.append("\"token\":");
jsonResponse.append("\"" + token + "\"");
jsonResponse.append("}");
return jsonResponse.toString();
}
}
和HttpErrors类:
public class HttpErrors {
public HttpErrors(){
}
public HttpErrors(String errorCode, String errorKey, String errorMessage) {
super();
this.errorCode = errorCode;
this.errorKey = errorKey;
this.errorMessage = errorMessage;
}
private String errorCode;
private String errorKey;
private String errorMessage;
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorKey() {
return errorKey;
}
public void setErrorKey(String errorKey) {
this.errorKey = errorKey;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
@Override
public String toString() {
StringBuilder jsonError = new StringBuilder();
jsonError.append("{");
jsonError.append("\"errorCode\":");
jsonError.append("\"" + errorCode + "\",");
jsonError.append("\"errorKey\":");
jsonError.append("\"" + errorKey + "\",");
jsonError.append("\"errorMessage\":");
jsonError.append("\"" + errorMessage + "\"");
jsonError.append("}");
return jsonError.toString();
}
}
答案 0 :(得分:1)
public class Response<T> {
private int httpStatus;
private T data;
//getter and setter consructor
eg constructors
public RestResponse(T data){
this(HTTP_OK,data)
}
public RestResponse(int httpStatus,T data){
this.httpStatus = httpStaus;
this.data = data;
}
现在只需将此模板用于所有响应对象(repsone对象也可以是POJO)
return new RestEntity<LoginResponse>(loginResponse,statusCode) //loginResponse object
其中LoginResponse是
public class LoginResponse {
private String token;
//getter and setter and constructors.
}
你应该花一些时间来建立一个REST合同(使用google :)阅读它,然后继续使用这个基本逻辑。 Java和spring是神奇的。 玩得开心。
答案 1 :(得分:0)
也许尝试这样的事情(在我看来会更优雅)
在控制器中创建一个返回LoginResponse
的方法,但首先执行输入UserLog
的验证,一旦出现任何问题,抛出一个自定义异常,最终将被{{ {1}}
看看我的示例控制器
exceptionHandler
如果你想要,你可以检查我的bitbucket项目,它已全部实现: