我目前正在尝试通过调用一个以MultiPartFormData作为输入的资源来编写一个IT测试。
它在应用程序“正常”启动时工作,但在使用DropwizardAppRule助手启动时不工作。
这是我的代码:
@Test
public void importProductAndOfferCsvShopInput() {
// Given
var shopId = "id";
var multipartHeaders = headers;
multipartHeaders.putSingle("Content-Type", "multipart/form-data");
var file = new File("src/test/resources/import/products&offers.csv");
var fileDataBodyPart = new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE);
MultiPart multiPart = new FormDataMultiPart().bodyPart(fileDataBodyPart, MediaType.MULTIPART_FORM_DATA_TYPE);
// When
var response = QORUS_APP.client().target(String.format("http://localhost:%d/ui/shop-inputs/csv/%s", 8082, shopId))
.queryParam("importContentType", "BOTH")
.request()
.headers(multipartHeaders)
.post(Entity.entity(multiPart, multiPart.getMediaType()));
// Then
assertThat(response.getStatusInfo()).isEqualTo(Response.Status.OK);
}
QORUS_APP的发音如下:
public abstract class AbstractRestResourceTest {
@ClassRule
public static final DropwizardAppRule<Configuration> QORUS_APP = ResourceSuite.QORUS_APP;
private static final String USER_API_KEY = "authenticatedUserApiKey";
protected static MultivaluedMap<String, Object> headers;
public AbstractRestResourceTest() {
headers = new MultivaluedHashMap<>();
headers.putSingle("Content-Type", "application/json");
headers.putSingle("Accept", "*/*");
headers.putSingle(NgTokenAuthFilter.AUTHORIZATION_HEADER, "Bearer " + USER_API_KEY);
}
}
我收到以下错误:
消息找不到媒体类型=多部分/表单数据,类型=类组织.玻璃鱼.泽西岛.媒体.多部分.html" target="_blank">表单数据多部分,通用类型=类组织.玻璃鱼.泽西岛.媒体.多部分.表单数据多部分。消息正文提供不明例外:找不到媒体类型=多部分/表单数据,类型=类组织“玻璃鱼”“媒体”多部分“多部分”数据“,”多部分“表单数据多部分,通用类型=类组织”玻璃鱼“”泽西岛“媒体”多部分“表单数据多部分。
请注意,在应用程序引导中需要注册多部分:
private List<Resource> configureJersey(Configuration config, Environment environment) {
// adds some required features
environment.jersey().register(MultiPartFeature.class);
更新:
感谢@paul samsotha花时间回答。
我做了以下工作:
@Test
public void importProductAndOfferCsvShopInput() {
// Given
var shopId = "5b03ebe9c9aa0423b4a73dce";
var multipartHeaders = headers;
multipartHeaders.putSingle("Content-Type", "multipart/form-data");
var file = new File("src/test/resources/import/products&offers.csv");
var fileDataBodyPart = new FileDataBodyPart("file", file);
var multiPart = new FormDataMultiPart().bodyPart(fileDataBodyPart);
// When
var response = QORUS_APP.client()
.target(String.format("http://localhost:%d/ui/shop-inputs/csv/%s", 8082, shopId))
.register(MultiPartFeature.class)
.queryParam("importContentType", "BOTH")
.request()
.headers(multipartHeaders)
.post(Entity.entity(multiPart, multiPart.getMediaType()));
// Then
assertThat(response.getStatusInfo()).isEqualTo(Response.Status.OK);
}
就像你建议的那样。
错误发生在客户端,在客户端发出请求之前。请参阅表单上的文档,它将显示您还需要在客户端注册多部分功能
。您可以向客户端
或网络目标
注册它。Dropwizard建议您将其注册到WebTarget
,如示例所示。
var response = QORUS_APP.client()
.target(...)
.register(MultiPartFeature.class)
...
典型的DropWizard应用程序指定一个应用程序子类,并覆盖其< code>initialize方法,如下所示: 在仔细阅读了DropWizard文档以及爪哇文档之后: -YAML配置文件的对象表示。使用您自己的配置属性扩展它,它们也将从YAML文件中解析。 -启动前的应用程序环境,包含引导Dropwizard命令所需的一切。 -Dropwizard应用程序的环境。 但是这些是相当模糊的类定义,
我尝试使用dropWizard库获取JVM度量值(MemoryUsageGaugeSet、GarbageCollectionUsageGaigeSet) 代码实现。 我得到的结果是 {heap.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$8@d16011, non-heap.used=com.codahale.metrics.jvm
问题内容: 我正在尝试向我的SwiftUI Mac应用程序添加“拖放”手势/功能。 我想将文件从系统/桌面拖放到应用程序中。我发现它可以在常规Swift中使用。我现在正尝试在SwiftUI中执行此操作。 我在SwiftUI for Views中找到了一个函数。但是,看起来这仅适用于应用程序内部的内部手势。我想从外面拖文件。 在Swift中,您需要为拖动的类型注册NSView。 我想创建一个NSVi
作为桌面程序,当然希望能够实现操作系统的 drag & drop 功能。 很多网站已经支持拖拽文件 Electron 当然也支持 要在 app 中实现此功能 ,你需要在 Render 进程中调用webContents.startDrag(item) API, 此API会给 Main 进程发送一个ondragstart事件。 在 Render 进程中, 接收 ondragstart 事件并发送消息到
概览 作为桌面程序,当然希望能够实现操作系统的 drag & drop 功能。 很多网站已经支持拖拽文件, Electron 当然也支持 要在您的应用中实现此功能,您需要调用 webContent.startDrag(item) API 响应 ondragstart 事件。 示例 一个演示如何动态创建要从窗口中拖出的文件的示例。 Preload.js 在 preload.js 中使用 contex
允许拖放树中的节点,从而进行移动或复制操作。 $.jstree.defaults.dnddnd plugin 存储拖放插件的所有默认设置 $.jstree.defaults.dnd.copydnd plugin 一个布尔值,指示在拖动时是否应该可以进行复制(通过按入meta键或Ctrl)。默认为 true. $.jstree.defaults.dnd.open_timeoutdnd plugin