簡體   English   中英

用於文件上傳和JSON數據的Rest Service Java

[英]Rest service Java for file upload and JSON data

我可以使用可用於文件上傳的Rest服務,即多部分表單數據和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

讓我知道是否有任何方法可以解決這個問題

您可以使用任何客戶端語言來提交包含MultipartFile和Json數據的表單。 我在這里用Spring MVC編寫Java代碼。 它將發送String Json和MultiPartFile。 然后我要將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;
        }
    }

}

您是否不能關閉@Consumes並檢查方法本身中的Content-Type標頭,以決定在代碼中做什么? 您的問題似乎是該批注功能的限制(是Spring MVC嗎?)

我已經解決了問題,方法是從客戶端將JSON作為字符串傳遞,然后將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){

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM