小编ElA*_*rbi的帖子

使用Spring的REST多部分混合请求(文件+ json)

我需要将一个文件与json一起发送到我的Spring Controller.我有以下控制器类:

@Controller
@RequestMapping("/perform")
public class PerformController {

    ...

    @RequestMapping(path = "gopdf", method = RequestMethod.POST, consumes = { "multipart/mixed" })
    @ResponseStatus(HttpStatus.CREATED)
    public void handleFileUpload(@RequestPart("file") MultipartFile file, @RequestPart("map") String map,   HttpServletResponse response) throws Exception {
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

但是当我使用以下命令在我的服务器上卷曲时:

 curl -H "Content-Type: multipart/form-data" -F "map=@map.json; type=application/json" -F "content=@SMP.docx" -X POST localhost:9000/perform/gopdf-i -v
Run Code Online (Sandbox Code Playgroud)

我得到415不支持的媒体类型!

任何线索?

rest spring curl spring-mvc spring-boot

10
推荐指数
3
解决办法
3万
查看次数

为 Spring 控制器测试配置自定义 Json Serializer

我正在测试一个控制器:

@RestController()
public class MessagesController {
...
}
Run Code Online (Sandbox Code Playgroud)

使用@WebMvcTest 注释:

@RunWith(SpringRunner.class)
@WebMvcTest(value = {MessagesController.class})
public class MessagesControllerTest {

    private MockMvc mvc;

....

 this.mvc.perform(
                get("/messages/{id}", "dummyId")
                        .contentType(MediaType.APPLICATION_JSON))

                .andDo(print())
                .andExpect(status().isOk());
...
Run Code Online (Sandbox Code Playgroud)

但是当我启动我的测试时,Spring 尝试序列化一个 List> 类型的对象,但它失败了:

Resolved Exception:
             Type = org.springframework.http.converter.HttpMessageNotWritableException

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 500
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8]}
     Content type = application/json;charset=UTF-8
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc spring-boot spring-boot-test

7
推荐指数
0
解决办法
1003
查看次数

在Spring Boot Test中配置基本软件包以进行组件扫描

当我使用以下注释启动测试时:

package com.hello.package.p1;

@RunWith(SpringRunner.class)
@DataMongoTest
@SpringBootTest
public class ClassATest {

@Autowired
Service1 serivce1; //fqn = com.hello.package.p1.Service1 

@Autowired
Service2 serivce2; //fqn = com.hello.package.p2.Service2 

...}

package com.hello.package.p1;

@ActiveProfiles("test")
@SpringBootConfiguration
public class MongoTestConfig {
...
}
Run Code Online (Sandbox Code Playgroud)

service1将被注入。但是 service2不会,因为它与测试类不在同一个包中。我收到一个错误:

通过字段“ service2”表示不满意的依赖关系;嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException

例如,如何告诉测试上下文我要加​​载/扫描某个程序包com.hello

spring-test spring-data spring-boot

6
推荐指数
2
解决办法
6549
查看次数

REST Java客户端无法调用请求

我编写了一个REST服务,我用Firefox测试它,显示我的对象的JSON格式.但是当我使用简单的REST Java客户端调用相同的URL时,当我使用JUnit运行它时会出现以下错误:

javax.ws.rs.ProcessingException: Unable to invoke request
    at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:287)
    at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:407)
    at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.post(ClientInvocationBuilder.java:195)
    at ma.gesto.persistence.TestRESTServices.createAndDeleteAReference(TestRESTServices.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
**Caused by: javax.ws.rs.ProcessingException: could not find writer for content-type application/json type: ma.gesto.entity.Reference**
    at org.jboss.resteasy.core.interception.ClientWriterInterceptorContext.throwWriterNotFoundException(ClientWriterInterceptorContext.java:40)
    at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.getWriter(AbstractWriterInterceptorContext.java:138)
    at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:117) …
Run Code Online (Sandbox Code Playgroud)

java rest json web-services wildfly

4
推荐指数
1
解决办法
3万
查看次数

REST Java客户端API:在分配另一个之前释放连接

我正在使用以下测试代码调用REST服务:

public class TestRESTServices {
    private static final String BASE_URL = "http://localhost/ma.ge.persistence-1.0/rest/reference";
    private static URI uri = UriBuilder.fromUri(BASE_URL).port(8080).build();
    private static Client client = ClientBuilder.newClient();

    @Test
    public void createAndDeleteAReference() {

        Reference r = ReferenceFactory.createReference("Maz",
                "dummy", 1.7);
        Response response = client.target(uri).request().post(Entity.entity(r, MediaType.APPLICATION_JSON));
        assertEquals(Response.Status.CREATED, response.getStatusInfo());

        URI referenceURI = response.getLocation();

        // Get the posted reference
        response = client.target(referenceURI).request().get();

        Reference retreivedRef = response.readEntity(Reference.class);
        assertEquals(Response.Status.OK, response.getStatusInfo());
        assertEquals(retreivedRef.getName(), r.getName());

    }
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

在分配另一个之前,请确保释放连接。在org.apache.http.impl.conn.BasicClientConnectionManager $ 1.getConnection(BasicClientConnectionManager.java:139)在org.apache.http.impl.conn.BasicClientConnectionManager.java:162在org.apache.http。在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)处的impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:456)在org.apache.http.impl.client.AbstractHttpClient.execute( org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:283)上的AbstractHttpClient.java:805)...还有26个

java rest jax-rs

4
推荐指数
1
解决办法
6274
查看次数

使用 Spring Boot 测试时不想加载 application.yml

如何告诉 Spring 只加载 application-test.yml 而不是 application.yml 文件?

我有一个配置类:

@ActiveProfiles("test")
@SpringBootConfiguration

public class MongoTestConfig {

    @Autowired
    MongoOperations operations;
...
}
Run Code Online (Sandbox Code Playgroud)

和一个测试类:

@RunWith(SpringRunner.class)
@DataMongoTest
@SpringBootTest(classes = MongoTestConfig.class)
public class TagDefinitionRepositoryTest {
...
@Test
....
}
Run Code Online (Sandbox Code Playgroud)

我试图添加:

@TestPropertySource(locations = {"classpath:application-test.yml"})
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
Run Code Online (Sandbox Code Playgroud)

到我的配置类,但它不起作用:Spring 仍然加载 application.yml

spring-test spring-boot spring-boot-test

3
推荐指数
1
解决办法
4175
查看次数

对Wildfly的Arquillian远程测试

我是Arquillian的新手,我在远程测试方面遇到了一些问题.我正在尝试使用Arquillian对Wildfly进行远程测试.我的Wildfly实例可以通过端口8180到达,但是它运行在内部端口8080上的本地虚拟机上.我已经设置了Vagrant和VirtualBox的端口转发

当我从eclipse运行我的测试时,我收到以下错误:

java.lang.IllegalStateException: Error launching test playeraudio.repository.player.PlayerRepositoryTestCase public void playeraudio.repository.player.PlayerRepositoryTestCase.should_find_all_players() throws java.lang.Exception
at org.jboss.arquillian.protocol.servlet.ServletMethodExecutor.invoke(ServletMethodExecutor.java:103)
at org.jboss.arquillian.container.test.impl.execution.RemoteTestExecuter.execute(RemoteTestExecuter.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:145)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:116)
at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
at org.jboss.arquillian.container.test.impl.execution.ClientTestExecuter.execute(ClientTestExecuter.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142)
at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createTestContext(ContainerEventController.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) …
Run Code Online (Sandbox Code Playgroud)

jboss-arquillian wildfly-8

2
推荐指数
1
解决办法
1239
查看次数