【发布时间】:2021-05-28 05:22:36
【问题描述】:
给定以下 json 文件:
{
"noticiaDTOs": [
{
"idiomaPais": {
"idioma": {
"id": 3,
"iso6391": "pt"
},
"pais": {
"id": 1,
"sigla": "BR"
}
},
"linguagem": null,
"defaultLanguage": 1,
"idiomaNoticia": {
"id": 114,
"conteudo": "<p>uhuhuhuhuhu</p>",
"titulo": "uhuhuhuhuhu",
"resumo": "<p>huhuhuhuhu</p>"
},
"fileDTO": {
"profileDTO": {
"filetype": "application/json",
"value": " O BASE 64 DA IMAGEM"
},
"nome": "pt-BR"
},
"tags": [
{
"dtCriacao": "2020-10-07T12:48:16.775+0000",
"dtAlteracao": "2020-10-07T12:48:16.775+0000",
"ativo": true,
"id": 4,
"nome": "Política",
"tag": "POLI"
}
]
},
{
"idiomaPais": {
"idioma": {
"id": 4,
"iso6391": "en"
},
"pais": {
"id": 10,
"sigla": "US"
}
},
"linguagem": null,
"defaultLanguage": 2,
"idiomaNoticia": {
"id": "",
"conteudo": [],
"titulo": [],
"resumo": []
},
"fileDTO": {
"profileDTO": {}
},
"tags": [
{
"dtCriacao": "2020-10-07T12:48:16.775+0000",
"dtAlteracao": "2020-10-07T12:48:16.775+0000",
"ativo": true,
"id": 4,
"nome": "Política",
"tag": "POLI"
}
]
},
{
"idiomaPais": {
"idioma": {
"id": 5,
"iso6391": "it"
},
"pais": {
"id": 11,
"sigla": "IT"
}
},
"linguagem": null,
"defaultLanguage": 2,
"idiomaNoticia": {
"id": "",
"conteudo": [],
"titulo": [],
"resumo": []
},
"fileDTO": {
"profileDTO": {}
},
"tags": [
{
"dtCriacao": "2020-10-07T12:48:16.775+0000",
"dtAlteracao": "2020-10-07T12:48:16.775+0000",
"ativo": true,
"id": 4,
"nome": "Política",
"tag": "POLI"
}
]
}
],
"usuario": {
"dtCriacao": "2020-04-27T20:14:53.748+0000",
"dtAlteracao": "2020-10-23T16:19:32.809+0000",
"ativo": true,
"id": 39,
"pessoa": {
"dtCriacao": "2020-04-27T20:14:53.484+0000",
"dtAlteracao": "2020-04-27T20:14:53.484+0000",
"ativo": true,
"nome": "Fenacon T.I",
"nascimento": null,
"inscricaoEstadual": null,
"email": "tifenacon@gmail.com",
"telefone": "321321321231",
"celular": "2323123123123",
"cnpj": "70899341000126",
"razaoSocial": "Fenacon T.I",
"idPessoa": 244
},
"perfilUsuario": {
"dtCriacao": "2020-01-08T02:00:00.000+0000",
"dtAlteracao": "2020-01-08T02:00:00.000+0000",
"ativo": true,
"id": 1,
"nome": "Administrador",
"perfil": "ADMINISTRADOR"
},
"senha": "$2a$10$RUSfuzwbWGGd/8jqh0Ltm.XrV8q3gdW8K7Dfg0/7HCWkKgLFZhafe",
"logado": false,
"primeiro_acesso": false
},
"tags": [
{
"dtCriacao": "2020-10-07T12:48:16.775+0000",
"dtAlteracao": "2020-10-07T12:48:16.775+0000",
"ativo": true,
"id": 4,
"nome": "Política",
"tag": "POLI"
}
]
}
我有这个方法来阅读这个:
@PostMapping
@RequestMapping("/update/{id}")
@ResponseStatus(HttpStatus.CREATED)
public List<NoticiaIdiomaDTO> update(@RequestBody NoticiaIdiomaDTO noticiaIdiomaDTO, @PathVariable("id")Long id) throws NoSuchAlgorithmException {
List<NoticiaIdiomaDTO> noticiasIdiomasDTO = new ArrayList<NoticiaIdiomaDTO>();
try {
Noticia noticia = new Noticia();
List<NoticiaDTO> noticiaDTOs = noticiaIdiomaDTO.getNoticiaDTOs();
String nameImage = new String();
if (noticiaIdiomaDTO.getFileDTO() != null) {
nameImage = uploadImage(noticiaIdiomaDTO.getFileDTO());
//int i = 0;
}
int i = 0;
for(NoticiaDTO noticiaDTO : noticiaDTOs) {
if(noticia.getId() != null) {
if(noticiaDTO.getFileDTO()!=null && noticiaDTO.getFileDTO().getProfileDTO().getValue() != null) {
uploadFile(noticiaDTO.getFileDTO());
if(noticiaDTO.getDefaultLanguage() == 1) {
noticia.setThumbnail(nameImage);
//Pais pais = new Pais();
Optional<Pais> pais = paisService.porId(1);
//pais.setId(paisService.getByUsuario(noticiaIdiomaDTO.getUsuario().getId()).getId());
noticia.setPais(pais.get());
noticia.setId(null);
//noticia.setConteudo(noticiaIdiomaDTO.getNoticiaDTOs().get(0).getIdiomaNoticia().getConteudo());
//noticia.setTitulo(noticiaIdiomaDTO.getNoticiaDTOs().get(0).getIdiomaNoticia().getTitulo());
noticia.setUsuario(noticiaIdiomaDTO.getUsuario());
//noticia.setAtivo((noticia.getAtivo()) == false)?2:noticia.getAtivo());
//noticia.setUrl(EnvironmentsUtil.getEnvironmentImage());
service.atualizar(noticia);
NoticiaTAG noticiaTag = new NoticiaTAG();
noticiaTag.setNoticia(noticia);
noticiaTag.setTag(noticiaDTO.getTags().get(i));
noticiaTagService.atualizar(noticiaTag);
IdiomaNoticia idiomaNoticia = new IdiomaNoticia();
idiomaNoticia = noticiaDTO.getIdiomaNoticia();
idiomaNoticia.setNoticia(noticia);
idiomaNoticia.setIdioma(noticiaDTO.getIdiomaPais().getIdioma());
idiomaNoticiaService.atualizar(idiomaNoticia);
}
}
if(valid) {
uploadFile(noticiaDTO.getFileDTO());
}
};
noticiasIdiomasDTO.get(i).setNoticiaDTOs(noticiaDTOs);
i++;
}
}catch (Exception e) {
// TODO: handle exception
throw new AppException("Erro Interno no Servidor.");
}
return noticiasIdiomasDTO;
}
但是,我收到了这个错误:
2021-02-25 15:39:48.329 WARN 16204 --- [nio-8080-exec-1] .wsmsDefaultHandlerExceptionResolver:已解决 [org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法反序列化实例来自 START_ARRAY 令牌的java.lang.String;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize of java.lang.String out of START_ARRAY token
在 [来源:(PushbackInputStream);行:1,列:65973](通过参考链:br.com.ifenacon.idbs.orm.model.custom.NoticiaIdiomaDTO["noticiaDTOs"]->java.util.ArrayList[1]->br.com.ifenacon .idbs.orm.model.custom.NoticiaDTO["idiomaNoticia"]->br.com.ifenacon.idbs.orm.model.IdiomaNoticia["conteudo"])]
【问题讨论】:
-
能否也包括 NoticiaIdiomaDTO 的代码。这使您更容易理解您要反序列化的对象
标签: java arrays json spring-boot deserialization