Depuração conjunta de front-end e back-end, problemas de conversão JSON
JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;
Erro de análise JSON: não é possível desserializar a instância de `java.lang.String` do token START_ARRAY:
Os problemas acima são: depuração conjunta de front-end e back-end, conversão de tipo inconsistente, matrizes, etc., não podem ser convertidas para o tipo String.
Quando eu estava fazendo depuração conjunta no front-end e no back-end, descobri que os dados JSON passados do front-end eram:
{
"customAttributeItems": [
{
"text": "wq"
}
],
"name": "eq",
"brandIds": [
{
"id": 3,
"text": "三星"
},
{
"id": 4,
"text": "小米"
}
],
"specIds": [
{
"id": 28,
"text": "手机屏幕尺寸"
}
]
}
O formato acima é um formato JSON complexo, e o valor à esquerda corresponde a um array, e há objetos no array, porém, o formato que recebo ao transmitir para o background é do tipo String, que é o seguinte:
Descobri que o formato que recebi era do tipo String e descobri a causa do erro!
resolver
E como meu front-end introduz dados JSON transmitidos por arquivos JS externos, os dados JSON do front-end não podem ser convertidos em strings, portanto, a classe intermediária de back-end pode ser usada para concluir a conversão de dados.
1. Apresente a ferramenta de conversão json
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
2. Crie a classe de conversão correspondente
public class TypeTemplateAddReq {
private Long id;
/**
* 模板名称
*/
private String name;
/**
* 关联规格
*/
private JSONArray specIds;
/**
* 关联品牌
*/
private JSONArray brandIds;
/**
* 自定义属性
*/
private JSONArray customAttributeItems;
//get set方法省略,自己生成
}
3. Use classe de conversão intermediária para receber
@RequestMapping("/add")
public String add( @RequestBody TypeTemplateAddReq req){
//创建数据库映射的实体类
TypeTemplate typeTemplate = new TypeTemplate();
//将中间类的数据拷贝到 数据库映射的实体类中
//这种拷贝是将id name那些类型对应上的数据拷贝进来
BeanUtils.copyProperties(req,typeTemplate);
//将中间类接受到的JSON数据,转换为String,并手动设置到数据库映射的实体类中
typeTemplate.setCustomAttributeItems(req.getCustomAttributeItems().toJSONString());
typeTemplate.setBrandIds(req.getBrandIds().toJSONString());
typeTemplate.setSpecIds(req.getSpecIds().toJSONString());
//测试数据
// System.out.println(typeTemplate);
// String jsonString = JSON.toJSONString(typeTemplate);
// System.out.println(jsonString);
//进行service、DAO层等操作
boolean s= typeTemplateService.add(typeTemplate);
//返回值根据自己的业务来返回
return null;
}
O acima é a conversão entre dados JSON que pode ser concluída por meio de classes intermediárias.