How to pass byte array as a parameter in Spring Rest API

14,881

Solution 1

You can encode your byte array into Base64 string, then decode it back to byte array after receiving in controller.

Solution 2

By given code, I am guessing that you are trying to upload a file. If that is the case you can simply upload file and accept them in controller as mentioned in below example where we are accepting one customer object and one file object

@RequestMapping(value = "/registration/uploadFile", method = RequestMethod.POST)
public Customer saveFile(@RequestPart("customer") @Valid Customer customer, @RequestPart("file") @Valid MultipartFile file) {
    return customerService.saveFile(customer, file);
}
Share:
14,881
Raghav
Author by

Raghav

Updated on June 12, 2022

Comments

  • Raghav
    Raghav almost 2 years

    I am trying to pass few parameters, which includes byte[] as one, to a Rest Service. In the Service method when I consume the parameter and construct a File out of it ...I see a corrupted file. Below is my code:

    public class MultiParameters {
        @JsonProperty(value="strName")
        public String strName;
        @JsonProperty(value="in")
        public byte[] in;
        public String strName2;
    
    
        public String getStrName2() {
            return strName2;
        }
    
        public void setStrName2(String strName2) {
            this.strName2 = strName2;
        }
    
        public String getStrName() {
            return strName;
        }
    
        public void setStrName(String strName) {
            this.strName = strName;
        }
    
        public byte[] getIn() {
            return in;
        }
    
        public void setIn(byte[] in) {
            this.in = in;
        }
    

    RestController:

    @RequestMapping(value= "/upload",  method = RequestMethod.POST)
    public void upload(@RequestBody MultiParameters obj){           
        try {
            System.out.println("str name :  "+obj.getStrName());
            System.out.println("str name2 : "+obj.getStrName2());
            System.out.println("bytes lenghts : "+obj.getIn());
    
            FileOutputStream fos = new FileOutputStream(new File("D:\\Test.txt"));
            fos.write(obj.getIn());
            fos.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    Can any one let me know what is the error over here?

    I am testing my service by passing input as RAW Data in the form of JSON using Post Man.

    Thanks.