Java 向rest端点发送json数组会导致jackson解析异常
我用过的堆栈Java 向rest端点发送json数组会导致jackson解析异常,java,json,spring-boot,jackson,Java,Json,Spring Boot,Jackson,我用过的堆栈 弹簧靴1.5.6 realease ajax jquery 3.3.1 我的目标 我正试图将一些数据打印到jasper报表中,所以我创建了一个rest控制器,我想从前端发送json数据,并通过jackson api将其解析到pojo列表中,然后使用JRDataBean处理我的报表 我的代码 当按下打印按钮时,我正在使用ajax发送这个json数组,这是我从chrome控制台获得的,通过使其成为一个全局变量,然后使用一个副本(我在谷歌上搜索以获取字符串形式的变量内容) 这是我的
- 弹簧靴1.5.6 realease
- ajax jquery 3.3.1
- 这是我的json
- 这是我做post请求的部分
@RestController
@RequestMapping(PrintController.API)
public class PrintController {
public static final String API="print";
@PostMapping("client")
public void export(@RequestBody List<ClientJsonDto> datas,HttpServletResponse response){
System.out.println(datas);
// processing the print mechanisme
}
}
@RestController
@请求映射(PrintController.API)
公共类打印控制器{
公共静态最终字符串API=“打印”;
@后映射(“客户”)
公共void导出(@RequestBody列表数据,HttpServletResponse){
系统输出打印项次(数据);
//处理打印机制
}
}
最后是我的ClientJsonDto.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"codeInterne",
"clientName",
"clientPhone",
"codeExterne",
"email",
"clientType",
"clientEtat",
"identifiant",
"contacts",
"adresses"
})
public class ClientJsonDto {
@JsonProperty("codeInterne")
private Integer codeInterne;
@JsonProperty("clientName")
private String clientName;
@JsonProperty("clientPhone")
private String clientPhone;
@JsonProperty("codeExterne")
private String codeExterne;
@JsonProperty("email")
private String email;
@JsonProperty("clientType")
private Integer clientType;
@JsonProperty("clientEtat")
private Integer clientEtat;
@JsonProperty("identifiant")
private String identifiant;
@JsonProperty("contacts")
private List<Contact> contacts = null;
@JsonProperty("adresses")
private List<Adress> adresses = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
// getters, setters
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
“代码实习生”,
“客户名称”,
“客户端电话”,
“外部代码”,
“电子邮件”,
“客户端类型”,
“客户”,
“身份证明人”,
“联系人”,
“地址”
})
公共类clientjsondo{
@JsonProperty(“codeInterne”)
私有整数码内网;
@JsonProperty(“客户端名称”)
私有字符串clientName;
@JsonProperty(“客户端电话”)
私人字符串客户端电话;
@JsonProperty(“codeExterne”)
私有字符串代码外部;
@JsonProperty(“电子邮件”)
私人字符串电子邮件;
@JsonProperty(“clientType”)
私有整数clientType;
@JsonProperty(“客户服务”)
私有整数客户机;
@JsonProperty(“标识物”)
私有字符串标识符;
@JsonProperty(“联系人”)
私人列表联系人=null;
@JsonProperty(“地址”)
私有列表地址=null;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();
//能手,二传手
}
address.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"adress",
"ville"
})
public class Adress {
@JsonProperty("adress")
private String adress;
@JsonProperty("ville")
private String ville;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
//getters, setters
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
“地址”,
“维尔”
})
公共类地址{
@JsonProperty(“地址”)
私有字符串地址;
@JsonProperty(“维尔”)
私家侦探;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();
//能手,二传手
}
contact.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"nom",
"prenom",
"telephonePortable",
"email"
})
public class Contact {
@JsonProperty("nom")
private String nom;
@JsonProperty("prenom")
private String prenom;
@JsonProperty("telephonePortable")
private String telephonePortable;
@JsonProperty("email")
private String email;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
//getters setters
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
“名称”,
“prenom”,
“便携式电话”,
“电子邮件”
})
公共类联系人{
@JsonProperty(“nom”)
私有字符串名称;
@JsonProperty(“prenom”)
私有字符串prenom;
@JsonProperty(“便携式电话”)
私人电话;
@JsonProperty(“电子邮件”)
私人字符串电子邮件;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();
//吸气剂二传手
}
我面临的例外是:
2018-11-18 15:12:40.255警告1768---[nio-8082-exec-9]
.w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP
信息:
org.springframework.http.converter.httpMessageNodeTableException:
JSON分析错误:无法识别的标记“对象”:应为('true',
“false”或“null”);嵌套异常是
com.fasterxml.jackson.core.JsonParseException:无法识别的令牌
'object':应为[Source:
java.io。PushbackInputStream@1df244f9;第1行第9列]
在jackson试图封送之前,我可以做些什么来查看我的rest控制器作为请求主体接收到了什么
我能做些什么来修复此异常?我相信您希望查看接收到的内容,以便找到它未映射到DTO的原因 试着改变
@RequestBody List<ClientJsonDto> datas
查看是否可以打印和调试它。我相信您希望查看接收到的内容,以便找到它没有映射到DTO的原因 试着改变
@RequestBody List<ClientJsonDto> datas
看看是否可以打印和调试它。您的json值和映射都是正确的,但我无法看到具有映射后请求的生产者和消费者,因为您必须明确定义生产者和消费者 错误可能是由于您提供给控制器的数据格式造成的。您的控制器方法需要JSON字符串。例如,在jQuery中,JSON.stringify()为您提供JSON字符串。因此,我建议您在客户端确认这一点,从客户端将数据发送到此控制器 需要更改和检查的代码
@RestController
@RequestMapping(PrintController.API)
public class PrintController {
public static final String API="print";
@PostMapping("client",produces=MediaType.APPLICATION_JSON_VALUE,consumes=MediaType.APPLICATION_JSON_VALUE)
public void export(@RequestBody List<ClientJsonDto> datas,HttpServletResponse response){
System.out.println(datas);
// processing the print mechanisme
}
}
@RestController
@请求映射(PrintController.API)
公共类打印控制器{
公共静态最终字符串API=“打印”;
@PostMapping(“客户端”,products=MediaType.APPLICATION\u JSON\u VALUE,consumes=MediaType.APPLICATION\u JSON\u VALUE)
公共void导出(@RequestBody列表数据,HttpServletResponse){
系统输出打印项次(数据);
//处理打印机制
}
}
您的json值和映射都是正确的,但我无法看到具有映射后请求的生产者和消费者,因为您必须明确定义生产者和消费者
错误可能是由于您提供给控制器的数据格式造成的。您的控制器方法需要JSON字符串。例如,在jQuery中,JSON.stringify()为您提供JSON字符串。因此,我建议您在客户端确认这一点,从客户端将数据发送到此控制器
需要更改和检查的代码
@RestController
@RequestMapping(PrintController.API)
public class PrintController {
public static final String API="print";
@PostMapping("client",produces=MediaType.APPLICATION_JSON_VALUE,consumes=MediaType.APPLICATION_JSON_VALUE)
public void export(@RequestBody List<ClientJsonDto> datas,HttpServletResponse response){
System.out.println(datas);
// processing the print mechanisme
}
}
@RestController
@请求映射(PrintController.API)
公共类打印控制器{
公共静态最终字符串API=“打印”;
@PostMapping(“客户端”,products=MediaType.APPLICATION\u JSON\u VALUE,consumes=MediaType.APPLI
@RequestBody List datas
@RestController
@RequestMapping(PrintController.API)
public class PrintController {
public static final String API="print";
@PostMapping("client",produces=MediaType.APPLICATION_JSON_VALUE,consumes=MediaType.APPLICATION_JSON_VALUE)
public void export(@RequestBody List<ClientJsonDto> datas,HttpServletResponse response){
System.out.println(datas);
// processing the print mechanisme
}
}
$(document).on('click', '#menu0-func1-menu0-func1', function(){
console.log(printData);
var jsonData =JSON.parse(JSON.stringify(printData));
var settings = {
"async" : true,
"crossDomain" : true,
"url" : "http://"+document.location.host+"/facturation/print/client",
"method" : "POST",
"headers" : {
"cache-control" : "no-cache",
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
"processData" : false,
"contentType" : "application/json",
"dataType" : "text",
"data" : JSON.stringify(printData)
}
$.ajax(settings).done(function(response) {
console.log(response);
});
});
var printData =[];
function displayList(){
console.log("click");
if(console.log($('#search-client').val())){
console.log($('#search-client').val().toLowerCase());
}
var as=clientsData.filter((n,i,a) =>{return (
n.email.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.contacts[0].nom.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.contacts[0].prenom.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.adresses[0].ville.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.contacts[0].telephonePortable.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0)});
var html=' ';
console.log(as.length);
printData = [];
for(var i=0; i<as.length ; i++){
var ClientJsonDto = as[i];
html+=[{client : as[i] , index : i}].map(RefCliElement).join('');
printData.push(ClientJsonDto);
}
console.log(JSON.stringify(printData));
$('#clientList').html(html);
console.log(html);
}
var printData;
function displayList(){
console.log("click");
if(console.log($('#search-client').val())){
console.log($('#search-client').val().toLowerCase());
}
var as=clientsData.filter((n,i,a) =>{return (
n.email.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.contacts[0].nom.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.contacts[0].prenom.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.adresses[0].ville.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0 ||
n.contacts[0].telephonePortable.toLowerCase().indexOf($('#search-client').val().toLowerCase()) >= 0)});
var html=' ';
console.log(as.length);
for(var i=0; i<as.length ; i++){
html+=[{client : as[i] , index : i}].map(RefCliElement).join('');
}
printData = as;
$('#clientList').html(html);
console.log(html);
}