Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring@RequestBody映射问题-如何查看未映射的值?_Java_Json_Spring - Fatal编程技术网

Java Spring@RequestBody映射问题-如何查看未映射的值?

Java Spring@RequestBody映射问题-如何查看未映射的值?,java,json,spring,Java,Json,Spring,我使用Spring控制器通过@RequestBody注释将JSON转换为Java。我正在调试这个,但是,正如我之前所经历的,我知道JSON没有映射到我的实体,但是我非常好奇,从Java的角度来看,未映射的JSON是什么。有没有办法让它在我的控制器中可见?以下是我的控制器方法: @PostMapping(path="/Add") // Map ONLY GET Requests public @ResponseBody PurchaseRequestLineItem addNewPurch

我使用Spring控制器通过@RequestBody注释将JSON转换为Java。我正在调试这个,但是,正如我之前所经历的,我知道JSON没有映射到我的实体,但是我非常好奇,从Java的角度来看,未映射的JSON是什么。有没有办法让它在我的控制器中可见?以下是我的控制器方法:

    @PostMapping(path="/Add") // Map ONLY GET Requests
public @ResponseBody PurchaseRequestLineItem addNewPurchaseRequestLineItem (@RequestBody PurchaseRequestLineItem purchaseRequestLineItem) {

    purchaseRequestLineItemRepository.save(purchaseRequestLineItem);
    System.out.println("PurchaseRequestLineItem saved:  "+purchaseRequestLineItem);
    return purchaseRequestLineItem;
}
这是我的实体:

    package com.prs.business.purchaserequest;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@Table(name="purchaserequestlineitem")
public class PurchaseRequestLineItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
//  @Column(name="purchaserequestid")
//  private int purchaseRequestID;
    @ManyToOne
    @JoinColumn(name="PurchaseRequestID")
    @JsonIgnore
    private PurchaseRequest purchaseRequest;
    private int productID;
    private int quantity;

    public PurchaseRequestLineItem() {
        id = 0;
        //purchaseRequestID = 0;
        purchaseRequest = null;
        productID = 0;
        quantity = 0;
    }

    public PurchaseRequestLineItem(PurchaseRequest inPR, int inPdtID, int inQty) {
        purchaseRequest = inPR;
        productID = inPdtID;
        quantity = inQty;
    }

//  public PurchaseRequestLineItem(int inPRID, int inPdtID, int inQty) {
//      purchaseRequestID = inPRID;
//      productID = inPdtID;
//      quantity = inQty;
//  }
//  
    public PurchaseRequestLineItem(int inID, PurchaseRequest inPR, int inPdtID, int inQty) {
        id = inID;
        purchaseRequest = inPR;
        productID = inPdtID;
        quantity = inQty;
    }

//  public PurchaseRequestLineItem(int inID, int inPRID, int inPdtID, int inQty) {
//      id = inID;
//      purchaseRequestID = inPRID;
//      productID = inPdtID;
//      quantity = inQty;
//  }
//
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

//  public int getPurchaseRequestID() {
//      return purchaseRequestID;
//  }
//
//  public void setPurchaseRequestID(int purchaseRequestID) {
//      this.purchaseRequestID = purchaseRequestID;
//  }
//
    public PurchaseRequest getPurchaseRequest() {
        return purchaseRequest;
    }
    public void setPurchaseRequest(PurchaseRequest purchaseRequest) {
        this.purchaseRequest = purchaseRequest;
    }
    public int getProductID() {
        return productID;
    }
    public void setProductID(int productID) {
        this.productID = productID;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    @Override
    public String toString() {
        return "\npurchaseRequestLineItem [id=" + id + ", purchaseRequest=" + purchaseRequest + ", productID="
                + productID + ", quantity=" + quantity + "]";
    }

}
以及我的属性文件中的我的行:
spring.jackson.property naming strategy=UPPER\u CAMEL\u CASE

您可以使用
String
查看请求正文

@PostMapping(path="/Add") // Map ONLY GET Requests
public @ResponseBody PurchaseRequestLineItem addNewPurchaseRequestLineItem (@RequestBody String json) {
    // do whatever you want
}

假设您使用Jackson JSON映射, 正如@gtosto所指出的, 接受
@RequestBody
作为字符串,并自己执行从字符串到JSON的转换

使用ObjectMapper完成(翻译工作)

下面是一个简单的方法:

public <Type> Type getInputJson(
    final String trackId,
    final Class<Type> inputJsonClass,
    final String inputJsonString)
{
    Type returnValue;

    try
    {
        returnValue = objectMapper.readValue(
            inputJsonString,
            inputJsonClass);
    }
    catch (IOException exception)
    {
        logger.warn(
            "exception while converting inputJson.  inputJsonClass.name: {}, inputJsonString: {}",
            inputJsonClass.getName(),
            inputJsonString);

        returnValue = null;
    }

    return returnValue;
}
以及以下财产:

    <jackson.version>2.2.3</jackson.version>
2.2.3

共享
PurchaseRequestLineItem
code。对“Jackson”转换器基础结构配置代码的相同请求。只添加了PRLI实体,但不确定“Jackson”转换器inf.config代码的含义。我认为这可能是命名策略属性。也包括这一点。
@PostMapping(path=“/Add”)//仅映射获取请求
。。。与问题无关,但注意到这里有问题吗?我看不出原因。如果OP想要一个json对象,他可以使用
@RequestBody JsonNode JsonNode
作为参数,而不需要手动进行json转换。然而,通常需要将其作为字符串(如另一个答案中所示)。您的代码还有额外的依赖项:CoreUtil、logger、input json类……我正在试用ObjectMapper,但有几个问题。。。对象映射器。。。这是来自fasterxml.jackson包吗?还有,CoreUtil正确吗?到处都看不到那个。提前谢谢!知道了。。我现在可以看到如何查看请求中的所有内容。。。。这与我传递的JSON相同,所以现在我意识到这并不完全是我想要的我特别遇到了一个问题,我正在传递我认为是好的JSON,但它没有正确映射到我的Java实体。我将添加我的JSON,希望您能够看到我的问题。
    <jackson.version>2.2.3</jackson.version>