[英]How to extract nested json values by using spring boot api call
[英]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.