繁体   English   中英

发布 API 使用 Spring 引导返回嵌套 Z466DEEC76ECDF5FCA6D38571F6324D5Z4 的 null 值

[英]Post API using Spring Boot returns null values for nested json

我是 Spring 引导的新手,并试图创建一个帖子 api 以将以下 json 发布到。 但是,当我在 api 上进行操作时,对于嵌套元素,会显示 null 值。

Json 请求:

{
  "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"
  }
}

响应获取:

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

我的 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;
    }


}

我的 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);
   }
}

我做错了什么。 另外,使用 JPARepositories 和 @autowired 会更好吗?

您不需要在 createProduct() 函数的参数中单独添加 p_formValues_BRW,因为在您的 JSON 请求中,您将 p_formValues_BRW 作为嵌套的 object 传递。

因此,在您的 controller 上,当您点击“/products”时,您将在 Product 中获得 p_formValues_BRW,因此更改后的 function 如下所示:

@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);

   }

由于您已经在请求正文中提供了p_formValues_BRW ,因此您无需将其添加到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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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