I have a controller like below
SubmitBatchController.java
@RestController
@RequestMapping({"/"})
@Api(value = "batch", tags = {"Batch "}, authorizations = {@Authorization(value="JwtToken")})
public class SubmitBatchController extends BasicController {
@PostMapping(value = "v1/batch", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CommonResponse<BatchSubmissionResponseModel> submitBatchClaim(
@ApiParam(hidden = true) @RequestHeader(required = false) String transId,
@ApiParam(hidden = true) @RequestHeader(required = false) String paymentReleaseInd,
@ApiParam(hidden = true) @RequestHeader(required = false) String emailMatchedInd,
@ApiParam(hidden = true) @RequestHeader(vrequired = false) String role,
@RequestBody BatchSubmissionRequestModel batchSubmissionRequestModel,
BindingResult br, HttpServletRequest request, HttpServletResponse response) throws Exception {
LocalDateTime startLocaleDateTime = LocalDateTime.now();
BatchSubmissionResponseModel batchSubmissionResponseModel = new BatchSubmissionResponseModel();
ContextBase ctxBase = getChainBaseContext(request);
ctxBase.put(PARAM_LOC.RESPONSE, batchSubmissionResponseModel);
HeaderRequestModel headers = new headerRequestModel();
batchSubmissionRequestModel.setTransId(transId);
headers.setRole(role);
headers.setPaymentReleaseInd(paymentReleaseInd);
headers.setEmailMatchedInd(emailMatchedInd);
batchSubmissionRequestModel.setHeaderRequestModel(headers);
}
}
BatchSubmissionRequestModel.java
public class BatchSubmissionRequestModel {
@ApiModelProperty(hidden = true) // this is captured as a header and set in the controller
@NotBlank(message = "Headers.transId.NotBlank")
private String transId;
@ApiModelProperty(hidden = true)
private HeaderRequestModel headerRequestModel;
public String getTransId() {
return transId;
}
public void setTransId(String transId) {
this.transId = transId;
}
public HeaderRequestModel getHeaderRequestModel() {
return headerRequestModel;
}
public void setHeaderRequestModel(HeaderRequestModel headerRequestModel) {
this.headerRequestModel= headerRequestModel;
}
}
HeaderRequestModel.java
public class HeaderRequestModel {
private String paymentReleaseInd;
private String emailMatchedInd;
private String role;
public String getPaymentReleaseInd() {
return paymentReleaseInd;
}
public void setPaymentReleaseInd(String paymentReleaseInd) {
this.paymentReleaseInd = paymentReleaseInd;
}
public String getEmailMatchedInd() {
return emailMatchedInd;
}
public void setEmailMatchedInd(String emailMatchedInd) {
this.emailMatchedInd = emailMatchedInd;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
Now I have another class, which has to take the headers from SubmitBatchController.java
& set it into FullEligibilityService.java
FullEligibilityRequestModel.java
public class FullEligibilityRequestModel{
private String transId;
private HeaderRequestModel headerRequestModel;
public String getTransId() {
return transId;
}
public void setTransId(String transId) {
this.transId = transId;
}
public DapHeaderRequestModel getDapHeaderRequestModel() {
return dapHeaderRequestModel;
}
public void setDapHeaderRequestModel(DapHeaderRequestModel dapHeaderRequestModel) {
this.dapHeaderRequestModel = dapHeaderRequestModel;
}
}
FullEligibilityService.java
(request is mapped to FullEligibilityRequestModel)
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class FullEligibilityServiceextends extends AServiceTask <FullEligibilityRequestModel, FullEligibilityResponseModel>{
private static final String HEADER_FULL_ELIGIBILITY_TRANS_ID = "transId";
private static final String HEADER_PAYMENT_RELEASE_INDICAATOR = "paymentReleaseInd";
private static final String HEADER_EMAIL_MATCHED_INDICATOR = "emailMatchedInd";
private static final String HEADER_ROLE = "role";
@Override
protected void processTask() {
try {
Map<String, String> headers = new HashMap<String, String>();
headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
headers.put(HEADER_FULL_ELIGIBILITY_TRANS_ID, request.getTransId());
headers.put(HEADER_PAYMENT_RELEASE_INDICAATOR, request.getHeaderRequestModel().getPaymentReleaseInd()); // getting NULL
headers.put(HEADER_EMAIL_MATCHED_INDICATOR, request.getHeaderRequestModel().getEmailMatchedInd()); // getting NULL
headers.put(HEADER_DAP_ROLE, request.getHeaderRequestModel().getRole()); // getting NULL
.....
}
catch (Exception e) {
LOGGER.error("FullEligibilityService.processTask call failed");
exception = e;
status = STATUS_TASK_EXCEPTION;
e.printStackTrace();
}
}
I'm not able to get the headers set in SubmitBatchController.java
into FullEligibilityService.java
, due to which I get null values.
Can someone help me how to set the PaymentReleaseInd, EmailMatchedInd, HeaderRequestModel
set in SubmitBatchController.java
into FullEligibilityService.java
CodePudding user response:
You need to inject an instance of FullEligibilityService
into SubmitBatchController
as follows and then you just need to call the corresponding method with the required parameters:
@RestController
@RequestMapping({"/"})
@Api(value = "batch", tags = {"Batch "}, authorizations = {@Authorization(value="JwtToken")})
public class SubmitBatchController extends BasicController {
@Autowired
FullEligibilityService fullEligibilityService;
@PostMapping(value = "v1/batch", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CommonResponse<BatchSubmissionResponseModel> submitBatchClaim(
@ApiParam(hidden = true) @RequestHeader(required = false) String transId,
@ApiParam(hidden = true) @RequestHeader(required = false) String paymentReleaseInd,
@ApiParam(hidden = true) @RequestHeader(required = false) String emailMatchedInd,
@ApiParam(hidden = true) @RequestHeader(vrequired = false) String role,
@RequestBody BatchSubmissionRequestModel batchSubmissionRequestModel,
BindingResult br, HttpServletRequest request, HttpServletResponse response) throws Exception {
LocalDateTime startLocaleDateTime = LocalDateTime.now();
BatchSubmissionResponseModel batchSubmissionResponseModel = new BatchSubmissionResponseModel();
ContextBase ctxBase = getChainBaseContext(request);
ctxBase.put(PARAM_LOC.RESPONSE, batchSubmissionResponseModel);
HeaderRequestModel headers = new headerRequestModel();
batchSubmissionRequestModel.setTransId(transId);
headers.setRole(role);
headers.setPaymentReleaseInd(paymentReleaseInd);
headers.setEmailMatchedInd(emailMatchedInd);
fullEligibilityService.processTask(paymentReleaseInd, emailMatchedInd, headers);
}
(...)
}
You need to change Service to accept the data you need as follows:
@Service
public class FullEligibilityServiceextends extends AServiceTask <FullEligibilityRequestModel, FullEligibilityResponseModel>{
public void processTask(String paymentReleaseInd, String emailMatchedInd, HeaderRequestModel headers) {
(...) //Whatever logic you want to implement
}
Right now you are trying to pass around the data you need via request headers which is definitely a bad practice.