【问题标题】:404 error while invoking a method in webservice在 web 服务中调用方法时出现 404 错误
【发布时间】:2024-01-17 13:21:01
【问题描述】:

我对网络服务很陌生。我正在使用 spring mvc 和 webservice 将文件上传到服务器。在弹簧控制器中,我尝试在多值映射中添加参数,如下所示

MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
formData.add("caption", "Test Caption");
formData.add("file",new FileSystemResource("/home/mytxt");
formData.add("jsonData",imageJson);

我的 httpheader 和 httpentity 如下所示

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
final HttpEntity<MultiValueMap<String,Object>> requestEntity = new HttpEntity<>(
                    formData, requestHeaders);

在服务端我的方法看起来像

@Path("/addImage")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response copyFromLocal(
            @FormDataParam("file") InputStream uploadedInputStream ) throws IOException 
{       
    return null;
}

到目前为止一切都很好,但是当我使用下面这样的方法时,该方法没有被调用

@POST
@Path("/addImage")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response copyFromLocal(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition content)
        throws IOException 
{   
}

客户端代码是

MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
formData.add("caption", "Test Caption");
formData.add("file",new FileSystemResource("/home/txt"));
formData.add("jsonData",imageJson);
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
final HttpEntity<MultiValueMap<String,Object>> requestEntity = new HttpEntity<>(
                    formData, requestHeaders);
responseFromService = this.baseAdapter.makeRequest(HttpMethod.POST,
                    requestEntity, relativeURL, String.class,true);

BaseAdapter 类使用 Spring RestTemplate 发布 url。

我想将控制器中映射中存在的所有参数传递给服务端的方法。任何人都可以帮助我解决这个问题吗?任何帮助表示赞赏。

【问题讨论】:

    标签: web-services spring-mvc jax-rs multipartform-data media-type


    【解决方案1】:

    我看到你在两个不同的参数上指定了两个 @FormDataParam("file") 注释,我认为它应该只应用于一个。

    @POST
        @Path("/addImage")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        public Response copyFromLocal(
                InputStream uploadedInputStream,
                @FormDataParam("file") FormDataContentDisposition content)
                throws IOException {
    
        }
    

    【讨论】:

    • 试过你告诉的那个。得到错误“POST request for "192.168.12.123:9090/services/image/addImage”导致 404 (Not Found); invoking error handler"
    • org.springframework.web.client.HttpClientErrorException: 404 Not Found
    • 你能发布你的客户端代码来访问这个网络服务吗?
    • 感谢您的回复。编辑了我的问题。现在客户端代码可用。