休息服务Java用于文件上载和JSON数据

时间:2015-02-05 11:46:09

标签: java json rest file-upload jersey-2.0

我可以使用可用于文件上传的休息服务,即多部分表单数据和JSON参数吗?以下是该服务的示例。

    @POST
    @Path("/upload")
    @Consumes({ MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_JSON })
    public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream,@FormDataParam("file") FormDataContentDisposition fileDetail, City city){

问题是在测试时我试图将这两个文件作为附件传递,将城市对象作为JSON传递,因为Content-Type可以是application/jsonmultipart/form-data,所以它会给我错误。

如果有办法处理此

,请告诉我

3 个答案:

答案 0 :(得分:1)

您可以使用任何客户端语言提交包含MultipartFile和Json数据的表单。我在这里编写Spring MVC中的Java代码。它将发送String Json和MultiPartFile。然后我将Cast String JSON转换为Map,并将文件保存在所需位置。

@RequestMapping(value="/hotel-save-update", method=RequestMethod.POST )
public @ResponseBody Map<String,Object> postFile(@RequestParam(value="file", required = false) MultipartFile file,
                                     @RequestParam(value = "data") String object ){

    Map<String,Object> map = new HashMap<String, Object>();
    try {
        ObjectMapper mapper = new ObjectMapper();
        map = mapper.readValue(object, new TypeReference<Map<String, String>>(){});
    }catch (Exception ex){
        ex.printStackTrace();
    }

    String fileName = null;

    if (file != null && !file.isEmpty()) {
        try {

            fileName = file.getOriginalFilename();
            FileCopyUtils.copy(file.getBytes(), new FileOutputStream(servletContext.getRealPath("/resources/assets/images/hotelImages") + "/" + fileName));

        } catch (Exception e) {
            header.put(Utils.MESSAGE, "Image not uploaded! Exception occured!");
            return result;
        }
    }

}

答案 1 :(得分:0)

你不能离开@Consumes并检查方法本身的Content-Type标题,决定在代码中做什么? 你的问题似乎是对该注释功能的限制(是Spring MVC吗?)

答案 2 :(得分:0)

我通过将JSON作为String从客户端传递,然后将String转换为JSON对象来解决我的问题。

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream,
                                @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("city") String city){