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