Java post请求中作为JSON字符串传递的FormDataParam对象未正确反序列化
我有一个rest调用,它将一些参数作为FormDataParam。当我将json字符串中的object EngineConfigMeta传递给postman的rest调用时,在restcall级别,该对象没有得到正确的反序列化 休息通话Java post请求中作为JSON字符串传递的FormDataParam对象未正确反序列化,java,rest,jersey,multipartform-data,postman,Java,Rest,Jersey,Multipartform Data,Postman,我有一个rest调用,它将一些参数作为FormDataParam。当我将json字符串中的object EngineConfigMeta传递给postman的rest调用时,在restcall级别,该对象没有得到正确的反序列化 休息通话 @Path( "/add-config" ) @POST @Consumes( MediaType.MULTIPART_FORM_DATA ) @Produces( MediaType.APPLICATION_JSON ) public Response add
@Path( "/add-config" )
@POST
@Consumes( MediaType.MULTIPART_FORM_DATA )
@Produces( MediaType.APPLICATION_JSON )
public Response addConfig( @FormDataParam( "config" ) EngineConfigMeta config,
@FormDataParam( "file" ) InputStream configFileInputStream,
@FormDataParam( "file" ) FormDataContentDisposition cdh)
{
return Response.ok(Response.Status.OK).entity(buildJson(config.getVersion())).build();
}
EngineConfigMeta.java
public class EngineConfigMeta {
private String tenantName;
private long version;
EngineConfigMeta(String tenantName, long version) {
this.tenantName = tenantName;
this.version = version;
}
..getters and setters
}
这就是我使用postman将参数传递给rest调用的方式-
现在的问题是,当我调试rest调用的代码时,我只将所有json字符串分配给EngineConfigMeta pojo上的一个属性-
EngineConfigMeta{tenantName={"tenantName": "abc", "version": 2}, version=0}
如上所述,整个对象json字符串被分配给了tenantName属性。因此,反序列化在这里没有正确发生
请帮助我。这是因为客户端需要为单个
“config”
部分设置内容类型
标题。如果不执行此操作,则默认为text/plain
。因为您有一个接受字符串的构造函数,Jersey只假设将构造函数参数的值分配给传入的零件数据
在《邮递员》中,我认为您无法设置单个部分的内容类型。您需要做的是使用FormDataBodyPart
在服务器端手动设置类型。然后您可以手动获取EngineConfigMeta
public Response post(@FormDataParam("config") FormDataBodyPart part) {
part.setMediaType(MediaType.APPLICATION_JSON_TYPE);
EngineConfigMeta meta = part.getValueAs(EngineConfigMeta.class);
}
另请参见: