Home > Java > body text

In Java, how to copy an object value to a new object and change the data without affecting another reference variable

PHPz
Release: 2024-02-06 10:42:09
forward
1097 people have browsed it
Question content

I need to print the request body with masked data in the console. So I want to separate the request object that is masked for printing to the console from the request object that is used for business without masking.

So I cloned the request object (underwriterequest request) to a new object (underwriterequest requestmasking) and then used the method to mask the data.

But when I set the shielding ID to new object, the reference object (underwriterrequest request) also has shielding.

I don't want to block (underwriterequest request) because the object must be used in business logic.

Why does it affect the reference object? How can I mask data without affecting the reference object?

Thanks.

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();
    }
    
    

    
}
Copy after login

I use the clone() method to copy the object value to a new object. Because I think when I change the data in the new object, it won't affect the reference object. https://www.geeksforgeeks.org/clone-method-in-java-2/


Correct Answer


It seems that you are using SpringBoot framework. You can take a look at the BeanUtils.copyProperties(); method. This method assigns the same properties to the first and second objects via reflection. There won’t be the problem you mentioned

The above is the detailed content of In Java, how to copy an object value to a new object and change the data without affecting another reference variable. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template