简体   繁体   中英

Post API using Spring Boot returns null values for nested json

I am new to Spring boot, and was trying to create a post api to post the following json to. However, when I do a get on the api, for the nested elements, null values are displayed.

Json Request:

{
  "messageType": "abcd",
  "messageVersion": "1.1.0",
  "p_messageVersion": "1.095",
  "acsTransID": "6834628",
  "p_formValues_BRW": {
    "action": "http://10.10.65.96:8080/CORE/Test.htm",
    "correctFormData": "1234",
    "incorrectFormData": "0000",
    "cancelFormData": "true"
  }
}

Response on Doing a Get:

[{"acsTransID":"6834628","p_messageVersion":"1.095","messageVersion":"1.1.0","messageType":"abcd","p_formValues_BRW":{"action":null,"correctFormData":null,"incorrectFormData":null,"cancelFormData":null}}]

My Model Object

public class Product {
       @JsonProperty("acsTransID")
       private String acsTransID;
       
       @JsonProperty("p_messageVersion")
       private String p_messageVersion;
       
       @JsonProperty("messageVersion")
       private String messageVersion;
       
       @JsonProperty("messageType")
       private String messageType;
       
       @JsonProperty("p_formValues_BRW")
       private p_formValues_BRW p_formValues_BRW;
       
       public Product(p_formValues_BRW p_formValues_BRW) {
           this.p_formValues_BRW=p_formValues_BRW;
       }
       
       public Product() {
           
       }
       

       public String getacsTransID() {
          return acsTransID;
       }
       public void setacsTransID(String acsTransID) {
          this.acsTransID = acsTransID;
       }
       public String getp_messageVersion() {
          return p_messageVersion;
       }
       public void setp_messageVersion(String p_messageVersion) {
          this.p_messageVersion = p_messageVersion;
       }
       
       public String getmessageVersion() {
              return messageVersion;
           }
       
       public void setmessageVersion(String messageVersion) {
              this.messageVersion = messageVersion;
           }
       
       public String getmessageType() {
              return messageType;
           }
       
       public void setmessageType(String messageType) {
              this.messageType = messageType;
           }
       

       public p_formValues_BRW getp_formValues_BRW() {
       return p_formValues_BRW;
       }

       
       public void setp_formValues_BRW(p_formValues_BRW p_formValues_BRW) {
       this.p_formValues_BRW = p_formValues_BRW;
       }
       
/*     
       public Product withPFormValuesBRW(PFormValuesBRW pFormValuesBRW) {
           this.pFormValuesBRW = pFormValuesBRW;
           return this;
           }*/
           
}

class p_formValues_BRW {
    
    @JsonProperty("action")
    private String action;
    
    @JsonProperty("correctFormData")
    private String correctFormData;
    
    @JsonProperty("incorrectFormData")
    private String incorrectFormData;
    
    @JsonProperty("cancelFormData")
    private String cancelFormData;

    
    public String getaction() {
    return action;
    }

    public void setaction(String action) {
    this.action = action;
    }


    public String getcorrectFormData() {
    return correctFormData;
    }


    public void setcorrectFormData(String correctFormData) {
    this.correctFormData = correctFormData;
    }


    public String getincorrectFormData() {
    return incorrectFormData;
    }


    public void setincorrectFormData(String incorrectFormData) {
    this.incorrectFormData = incorrectFormData;
    }


    public String getcancelFormData() {
    return cancelFormData;
    }


    public void setcancelFormData(String cancelFormData) {
    this.cancelFormData = cancelFormData;
    }


}

My Controller

@RestController
public class ProductServiceController {
    

   private static Map<String, Product> productRepo = new HashMap<>();

   @RequestMapping(value = "/products", method = RequestMethod.POST)
   public ResponseEntity<Object> createProduct(@RequestBody Product product, p_formValues_BRW p_formValues_BRW) {
       product.setp_formValues_BRW(p_formValues_BRW);
      productRepo.put(product.getacsTransID(), product);
//      productRepo.put(product., PFormValuesBRWRepo);
      return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);
   }
   
   @RequestMapping(value = "/products")
   public ResponseEntity<Object> getProduct() {    
      return new ResponseEntity<>(productRepo.values(), HttpStatus.OK);
   }
}

What I am doing wrong. Also, would it be better to use JPARepositories and @autowired.

You don't need to add p_formValues_BRW in createProduct() function's parameter separately, because on your JSON Request you pass p_formValues_BRW as nested object.

So on your controller when you hit "/products" you will get p_formValues_BRW in Product, so function after changes look like this:

@RequestMapping(value = "/products", method = RequestMethod.POST)
   public ResponseEntity<Object> createProduct(@RequestBody Product product) {

       product.setp_formValues_BRW(product.getp_formValues_BRW());
      productRepo.put(product.getacsTransID(), product);
//      productRepo.put(product., PFormValuesBRWRepo);
      return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);

   }

As you already giving p_formValues_BRW in request body, you need not add it in Product .

@RequestMapping(value = "/products", method = RequestMethod.POST)
public ResponseEntity<Object> createProduct(@RequestBody Product product) {
  productRepo.put(product.getacsTransID(), product);
  // productRepo.put(product., PFormValuesBRWRepo);
  return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM