我的旧书堆
我的目标
我试图将一些数据打印到jasper report中,所以我创建了一个rest控制器,我想从前端发送json数据,并通过jackson api将其解析到pojo列表中,然后使用JRDataBean来处理我的报告
我的密码
当按下打印按钮时,我正在使用ajax发送这个json数组,我从chrome控制台获得了这个json数组,将其设置为一个全局变量,然后使用一个副本(我在谷歌上搜索以获取字符串形式的变量内容)
.
[ {
"codeInterne": 45,
"clientName": "TalcorpDZ",
"clientPhone": "+213778217469",
"codeExterne": "CLI201801",
"email": "talcorpdz@gmail.com",
"clientType": 0,
"clientEtat": 1,
"identifiant": "TalcorpDZ",
"contacts": [
{
"nom": "Taleb",
"prenom": "Mohammed Housseyn",
"telephonePortable": "04330256699",
"email": null
}
],
"adresses": [
{
"adress": "Batiments des enseignants Mohammed Khemisti",
"ville": "Maghnia"
}
]
},
{
"codeInterne": 64,
"clientName": "lkjhgf",
"clientPhone": "+213778217469",
"codeExterne": "dfghjk",
"email": "talcorpdz@gmail.com",
"clientType": 1,
"clientEtat": 1,
"identifiant": "lkjhgf",
"contacts": [
{
"nom": "Taleb",
"prenom": "Mohammed",
"telephonePortable": "02354649",
"email": "talcorpdz@gmail.com"
}
],
"adresses": [
{
"adress": "Batiments des enseignants Mohammed Khemist",
"ville": "Maghnia"
}
]
}
]
.
$(document).on('click', '#menu0-func1-menu0-func1', function(){
console.log(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" : "json",
"data" : printData
}
$.ajax(settings).done(function(response) {
console.log(response);
});
});
我的管理员对这篇文章很满意,其编码如下:
@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
}
}
最后是我的客户桑多。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
}
地址。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
}
联系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
}
我面临的例外是:
2018-11-18 15:12:40.255警告1768---[nio-8082-exec-9]。w、 s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP消息:org。springframework。http。转换器。HttpMessageEndableException:JSON解析错误:无法识别的标记“对象”:应为('true'、'false'或'null');嵌套的异常是com。fasterxml。杰克逊。果心JsonParseException:无法识别的标记“object”:在[Source:java.io]处应为('true'、'false'或'null')。PushbackInputStream@1df244f9; 第1行第9列]
在jackson尝试列表之前,我能做些什么来查看我的Rest控制器作为请求体接收到什么?
我可以做些什么来修复此异常?
终于修好了
我的修正基于本教程,我提到的是我正在以一种阴暗的方式处理我的数组,所以我尝试了同样的原理,并添加了JSON。stringify并将数据类型更改为text
这是我做的所有改变
$(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);
}
在修复之前,它是这样的,可能这个想法是为了避免,因为我使用的是一个不知道的jquery对象数组
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);
}
希望这能在未来帮助像我这样的入门级
我相信您希望看到接收到的内容,这样您就可以找到它没有映射到DTO的原因。
试着改变
@RequestBody List<ClientJsonDto> datas
到
@RequestBody List<Map> datas
或
@RequestBody List datas
看看你能否打印并调试它。
您的json值和映射都是正确的,但我无法看到producer和consumer发出映射后请求,因为您必须明确定义producer和consumer。
错误可能是由于您提供给控制器的数据格式造成的。控制器方法需要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
}
}
com.fasterxml.jackson.databind.jsonMappingException:属性“wallpaper”的setter定义冲突:在RializerCache._CreateAndCache2(deserializerCache.java:298)...com.fasterxml.jackson.databind.objectMapper._ReadMapandClose(
我正在解析下面的json,但无法正确理解。它说用户START_ARRAY令牌。 我正在用这个代码映射它: 我的响应类如下所示: 我的User类看起来像这样:
那么,我的问题是,有没有一种方法,我可以异步读取我的JSON文件块,不超过256MB的缓冲区长度,而不手动传播我的JSON数据到几个文件?
我试图解组xml导致saxparser异常,因为元素的值有一个未正确关闭的标记元素。这是我得到的,我必须处理的。 这里是示例xml- 上面的xml和其他字符串一起作为命令的值,标签没有正确关闭,导致以下异常- [org.xml.sax.saxpasseeption;行号:1;列号:212;元素类型“ctag”后面必须跟有属性规范,” 将xml输入作为字符串阅读器提供给unMarshall 我有两个
我已经编写了糟糕的代码来解析上面的json数组。下面是我使用的代码, 有谁能帮助我知道使用Jackson解析JSON吗?我们非常感谢你的帮助。
我正在将Jackson从1.9.4升级到2.2.0。过渡非常顺利,只是我似乎无法对对象进行数组解析。在1.9.4中,我可以这样做: 在Jackson 2.2.0中,我得到了一个“无法解析方法”编译时错误。Jackson 1.9.4的ObjectMapper头文件包含以下JsonNodes的readValue方法: 和Jackson 2.2.0的头文件: 所以我需要从传递JsonNode切换到Jso