java - Spring 不允许使用 405 方法

标签 java spring http spring-mvc retrofit

我对 HTTP 端点进行了以下测试:

public static final String DATA_PARAMETER = "data";

public static final String ID_PARAMETER = "id";

public static final String VIDEO_SVC_PATH = "/video";

public static final String VIDEO_DATA_PATH = VIDEO_SVC_PATH + "/{id}/data";

@Multipart
@POST(VIDEO_DATA_PATH)
public VideoStatus setVideoData(@Path(ID_PARAMETER) long id, @Part(DATA_PARAMETER) TypedFile videoData);

@Test
public void testAddVideoData() throws Exception {
    Video received = videoSvc.addVideo(video);
    VideoStatus status = videoSvc.setVideoData(received.getId(),
            new TypedFile(received.getContentType(), testVideoData));
    assertEquals(VideoState.READY, status.getState());

    Response response = videoSvc.getData(received.getId());
    assertEquals(200, response.getStatus());

    InputStream videoData = response.getBody().in();
    byte[] originalFile = IOUtils.toByteArray(new FileInputStream(testVideoData));
    byte[] retrievedFile = IOUtils.toByteArray(videoData);
    assertTrue(Arrays.equals(originalFile, retrievedFile));
}

我正在尝试使用 Swing 中定义的以下端点来实现此测试定义的要求:

@RequestMapping(method = RequestMethod.POST, value = "/video/{id}/data")
public void postVideoData(@PathVariable("id") long videoId,
        @RequestParam("data") MultipartFile videoData) throws IOException {
    if (videoId <= 0 || videoId > videos.size()) {
        throw new ResourceNotFoundException("Invalid id: " + videoId);
    }

    Video video = videos.get((int)videoId - 1);
    InputStream in = videoData.getInputStream();
    manager.saveVideoData(video, in);
}

问题是我收到“不允许使用 405 方法”错误。我做错了什么以至于我的 POST 方法没有被识别?

最佳答案

问题在于客户端接口(interface)需要从服务器返回一个 VideoStatus 对象。我在服务器端声明了返回 void 的方法。

关于java - Spring 不允许使用 405 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24985832/

相关文章:

java - 使用 Java JNA 捕获 Win32 事件

java - Spring:默认选择bean

java - 未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException 与 Spring MVC?

Spring REST 使用 Jackson - 400 错误请求日志记录

rest - PUT 的 HTTP 状态代码

http - 可以通过 HTTPS 提供 Polymer 2.0 PWA 吗?

java - 如何在 Eclipse 中开发 LibreOffice 扩展?

java - 当 ServletContextListener#contextInitialized() 失败时该怎么办

java - Scala 和 Java 在同一个项目中

http - 无法通过 Squid 代理测试基于 HTTP PUT 的文件上传