我的前端服务器发送一个从VueJS表单构建的JSON。我正在尝试使用Jersey 2.32来获取、Map和解析这个JSON。
{
"objetDesLiensDuTheme": {
"id": 7195,
"formalisation": {
"selectTitreFichier": "fiche de formalisation",
"inputTitreFichier": "fiche de formalisation titre fichier",
"inputFichier": {},
},
"modop": {
"selectTitreFichier": "fiche méthodologique",
"inputTitreFichier": "fiche méthodologique titre fichier",
"inputFichier": {},
},
}
}
字符串
我已经将其字符串化以显示其结构,但它是一个JSON对象,console.log也向我显示了“inputFichier”的内容:
inputFichier: File { name: "Fichier formalisation.txt", lastModified: 1690373320586, size: 0, type: "text/plain", webkitRelativePath: ""}
型
我的REST控制器方法看起来像这样:
@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_JSON)
public Response createLien(@BeanParam LiensDTO objetDesLiensDuTheme)
{
Response response;
//TODO
System.out.println(objetDesLiensDuTheme);
response = Response.status(Status.CREATED).build();
return response;
}
型
但是根据toString方法,bean参数似乎为null:
LiensDTO [objetDesLiensDuTheme=null]
型
下面是LiensDTO类(getter和setter未显示):
public class LiensDTO implements Serializable
{
private static final long serialVersionUID = -5717326975468155988L;
public LiensDTO()
{
super();
}
@FormParam("objetDesLiensDuTheme")
// @JsonProperty("objetDesLiensDuTheme")
private DocLienDTO objetDesLiensDuTheme;
@Override
public String toString()
{
return "LiensDTO [objetDesLiensDuTheme=" + objetDesLiensDuTheme + "]";
}
}
型
下面是DocLienDTO类(未显示getter和setter):
public class DocLienDTO implements Serializable
{
private static final long serialVersionUID = -493282593738066056L;
private int id;
private DocumentDTO formalisation;
private DocumentDTO modop;
}
型
最后是DocumentDTO类(未显示getter和setter):
public class DocumentDTO implements Serializable
{
private static final long serialVersionUID = -6698584238714969958L;
private String selectTitreFichier;
private String inputTitreFichier;
private File inputFichier;
}
型
当我尝试不使用@BeanParam
注解(如所描述的here或在rest控制器中使用@RequestBody
注解)时,我得到了以下异常:com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of
API.bean.LiensDTO out of START_ARRAY token at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 1].
但是,json对象不包含数组。
我还尝试使用@JsonProperty("objetDesLiensDuTheme")
而不是@FormParam("objetDesLiensDuTheme")
。
我想获取并迭代通过“objetDesLiensDuTheme”对象为我的上传模块。
1条答案
按热度按时间jtjikinw1#
问题是我的JSON包含File对象。
但是不能直接将File对象转换为JSON,即使使用JSON.stringify也不行。
有三种解决方案描述here。我选择了base64编码文件之前stringify整个身体对象。