Я разрабатываю приложение с загрузочной пружиной, например, под одним API:
@Autowired
GetUserIdByUserNameBase getUserIdByUserNameBase;
@PostMapping(value = "/UserName")
public GetUserIdByUserNameOutput getUserIdByUserName(@RequestBody String userName) {
GetUserIdByUserNameInput GetUserIdByUserNameInput = new GetUserIdByUserNameInput(userName);
getUserIdByUserNameBase.setGetUserIdByUserNameInput(GetUserIdByUserNameInput);
MsgStatus msgStatus = getUserIdByUserNameBase.execute();
if (msgStatus == MsgStatus.ERROR_MSG) {
LOG.error("UserRestController,getUserIdByUserName : Internal System Error");
}
return getUserIdByUserNameBase.getGetUserIdByUserNameOutput();
}
Моя проблема появляется во втором / следующем запросе с тем же API (например, выше)
«GetUserIdByUserNameBase» по-прежнему запоминает все сохраненные данные из
Первый удар!.
public class GetUserIdByUserNameBase extends ServiceBase {
private final Logger LOG = LogManager.getLogger(GetUserIdByUserNameBase.class);
private GetUserIdByUserNameInput getUserIdByUserNameInput;
private GetUserIdByUserNameOutput getUserIdByUserNameOutput;
private ResultStatus resultStatus;
private String userName;
private TBUSER_INFO userInfo;
Здесь, в моем случае, "getUserIdByUserNameOutput" все еще сохраняет предыдущий
данные от первого попадания API до тех пор, пока я не переопределю содержимое или не отмечу его как
пустой.
1. GetUserIdByUserNameBase.setGetUserIdByUserNameOutput (new GetUserIdByUserNameOutput);
или
- GetUserIdByUserNameBase.getGetUserIdByUserNameOutput () Setx (NULL);.
но здесь я создаю одну проблему, так как я создал новый экземпляр «GetUserIdByUserNameOutput» для каждого нового запроса API и не является эффективным и тяжелым для системы ...
Если я подведу итог, что я действительно хочу знать, как я могу сказать @Autowired
отказов / отдыха объекта при каждом новом запросе API и не использовать или переопределять то, что он помнит из первого запроса .?
Вот мой полный код:
package com.usermanagementms.ims.servicesfacade.userservices;
import javax.transaction.Transactional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.usermanagementms.ims.enums.MsgStatus;
import com.usermanagementms.ims.repositories.userdao.TBUserInfoDao;
import com.usermanagementms.ims.tables.user.TBUSER_INFO;
import com.usermanagementms.ims.types.commontypes.ResultStatus;
import com.usermanagementms.ims.types.getuseridbyusername.GetUserIdByUserNameInput;
import com.usermanagementms.ims.types.getuseridbyusername.GetUserIdByUserNameOutput;
import com.usermanagementms.ims.utils.ErrorMsg;
import com.usermanagementms.ims.utils.ErrorsController;
import com.usermanagementms.ims.utils.Utils;
@Service
public class GetUserIdByUserNameBase extends ServiceBase {
private final Logger LOG = LogManager.getLogger(GetUserIdByUserNameBase.class);
private GetUserIdByUserNameInput getUserIdByUserNameInput;
private GetUserIdByUserNameOutput getUserIdByUserNameOutput;
private ResultStatus resultStatus;
private String userName;
private TBUSER_INFO userInfo;
@Autowired
private TBUserInfoDao TBUserInfoDao;
@Autowired
private ErrorsController errorsController;
@Transactional
public TBUSER_INFO getUserIdByUserName(String username) {
TBUSER_INFO userInfo;
try {
userInfo = TBUserInfoDao.findIdByUserName(username);
if (userInfo == null) {
LOG.warn("UserService,getUserIdByUserName : userInfo is empty");
return null;
}
return userInfo;
} catch (Exception e) {
LOG.error("UserService,getUserIdByUserName : error in retrieving user from DB { " + e.getMessage() + "}");
}
return null;
}
@Override
public MsgStatus inputMapping() {
MsgStatus msgStatus = MsgStatus.SUCCESS_MSG;
this.setGetUserIdByUserNameOutput(new GetUserIdByUserNameOutput());
if (getResultStatus() == null) {
this.setResultStatus(new ResultStatus());
}
msgStatus = super.inputMapping();
if (msgStatus == MsgStatus.ERROR_MSG || this.getUserIdByUserNameInput == null) {
LOG.error("GetUserIdByUserNameBase,inpuMapping() : Internal System Error");
this.getErrorsController().fillResultStatus(ErrorMsg.SYSTEM_ERROR, this.resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.ERROR_MSG;
}
this.setUserName(getUserIdByUserNameInput.getUserNameX1());
return MsgStatus.SUCCESS_MSG;
}
@Override
public MsgStatus validate() {
if (Utils.isNullorEmpty(userName)) {
LOG.error("GetUserIdByUserNameBase,validate() : userName is null or empty");
this.getErrorsController().fillResultStatus(ErrorMsg.REQUEST_BODY_EMPTY, this.resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.ERROR_MSG;
}
return MsgStatus.SUCCESS_MSG;
}
@Override
public MsgStatus executeImpl() {
MsgStatus msgStatus = MsgStatus.SUCCESS_MSG;
TBUSER_INFO userInfo = getUserIdByUserName(userName);
this.setUserInfo(userInfo);
if (userInfo == null) {
msgStatus = this.getErrorsController().fillResultStatus(ErrorMsg.USER_NOT_FOUND, resultStatus);
if (msgStatus == MsgStatus.ERROR_MSG) {
this.getErrorsController().fillResultStatus(ErrorMsg.SYSTEM_ERROR, resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
LOG.error("GetUserIdByUserNameBase,executeImpl() : Internal System Error");
return MsgStatus.ERROR_MSG;
}
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.ERROR_MSG;
}
this.getErrorsController().fillResultStatus(ErrorMsg.OK, resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.SUCCESS_MSG;
}
@Override
public MsgStatus outputMapping() {
this.getGetUserIdByUserNameOutput().setUserId(this.getUserInfo().getUid());
return MsgStatus.SUCCESS_MSG;
}
public GetUserIdByUserNameInput getGetUserIdByUserNameInput() {
return getUserIdByUserNameInput;
}
public void setGetUserIdByUserNameInput(GetUserIdByUserNameInput getUserIdByUserNameInput) {
this.getUserIdByUserNameInput = getUserIdByUserNameInput;
}
public GetUserIdByUserNameOutput getGetUserIdByUserNameOutput() {
return getUserIdByUserNameOutput;
}
public void setGetUserIdByUserNameOutput(GetUserIdByUserNameOutput getUserIdByUserNameOutput) {
this.getUserIdByUserNameOutput = getUserIdByUserNameOutput;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public ErrorsController getErrorsController() {
return errorsController;
}
public void setErrorsController(ErrorsController errorsController) {
this.errorsController = errorsController;
}
public ResultStatus getResultStatus() {
return resultStatus;
}
public void setResultStatus(ResultStatus resultStatus) {
this.resultStatus = resultStatus;
}
public TBUSER_INFO getUserInfo() {
return userInfo;
}
public void setUserInfo(TBUSER_INFO userInfo) {
this.userInfo = userInfo;
}
}
public class GetUserIdByUserNameOutput {
private Long UserId;
private ResultStatus resultStatus;
public GetUserIdByUserNameOutput() {
}
public GetUserIdByUserNameOutput(Long userId, ResultStatus resultStatus) {
super();
UserId = userId;
this.resultStatus = resultStatus;
}
public GetUserIdByUserNameOutput(ResultStatus resultStatus) {
this.resultStatus = resultStatus;
}
public Long getUserId() {
return UserId;
}
public void setUserId(Long userId) {
UserId = userId;
}
public ResultStatus getResultStatus() {
return resultStatus;
}
public void setResultStatus(ResultStatus resultStatus) {
this.resultStatus = resultStatus;
}
}
Если вы посмотрите на этот метод:
public MsgStatus inputMapping() {
MsgStatus msgStatus = MsgStatus.SUCCESS_MSG;
this.setGetUserIdByUserNameOutput(new GetUserIdByUserNameOutput());
Я начинаю создавать "new GetUserIdByUserNameOutput ()" все время с каждым запросом на один и тот же API !! и я думаю, что это не эффективно и тяжело для системы для создания большого количества экземпляров GetUserIdByUserNameOutput через несколько раз ...