我需要在控制台中打印带有屏蔽数据的请求正文。因此,我希望将用于打印到控制台的屏蔽的请求对象与用于业务而不屏蔽的请求对象分开。
因此,我将请求对象(underwriterequest request)克隆到新对象(underwriterequest requestmasking),然后使用方法来屏蔽数据。
但是当我将屏蔽身份证设置为 new object 时,引用对象(underwriterequest 请求)也具有屏蔽。
我不想屏蔽(underwriterequest 请求),因为该对象必须在业务逻辑中使用。
为什么会对参考对象产生影响? 如何屏蔽数据而不影响参考对象?
谢谢。
public @ResponseBody ResponseEntity<UnderwriteResponse> execute(@RequestBody UnderwriteRequest request) { UnderwriteRequest requestMasking = maskingData(request); } public static UnderwriteRequest maskingData(UnderwriteRequest request) throws CloneNotSupportedException { UnderwriteRequest requestMasking = (UnderwriteRequest) request.clone(); try { if(request != null) { if(request.getRequestBody().getPersonalData().getIdCard() != null && !request.getRequestBody().getPersonalData().getIdCard().isEmpty()) { maskIdCard(requestMasking, request); } }catch (Exception e) { log.info(e); } return requestMasking; } public static void maskIdCard(UnderwriteRequest requestMasking, UnderwriteRequest request) { String maskChar = "X"; String maskString = StringUtils.repeat( maskChar, 9); String idcard = request.getRequestBody().getPersonalData().getIdCard(); requestMasking.getRequestBody().getPersonalData().setIdCard(StringUtils.overlay(idcard, maskString, 0, 9)); } @Getter @Setter public class UnderwriteRequest implements Cloneable{ private RequestHeader requestHeader; private RequestBrmsBody requestBrmsBody; private RequestBody requestBody; private RESPONSE_STATUS status = RESPONSE_STATUS.FAILED; private String message; @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } }
我使用clone()方法将对象值复制到新对象。 因为我认为当我更改新对象中的数据时,不会影响引用对象。https://www.geeksforgeeks.org/clone-method-in-java-2/
看来您正在使用SpringBoot框架。你可以看一下 BeanUtils.copyProperties();方法。该方法通过反射为第一个对象和第二个对象分配相同的属性。不会有你提到的问题
以上是在Java中,如何将对象值复制到新对象并更改数据而不影响另一个引用变量的详细内容。更多信息请关注PHP中文网其他相关文章!