Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MockMvc不会在post响应中返回创建的资源_Spring_Spring Boot_Spring Data Rest_Spring Boot Test_Mockmvc - Fatal编程技术网

Spring MockMvc不会在post响应中返回创建的资源

Spring MockMvc不会在post响应中返回创建的资源,spring,spring-boot,spring-data-rest,spring-boot-test,mockmvc,Spring,Spring Boot,Spring Data Rest,Spring Boot Test,Mockmvc,通常,当您发布到SpringDataREST端点时,响应包含位置头,其中包含指向新创建资源的url以及新资源在其主体中的json表示 但当我在MockMvc上发布如下内容时: @RunWith(SpringRunner.class) @SpringBootTest public class OrderRestTest { @Autowired private ObjectMapper objectMapper; @Autowired private WebAp

通常,当您发布到SpringDataREST端点时,响应包含位置头,其中包含指向新创建资源的url以及新资源在其主体中的json表示

但当我在MockMvc上发布如下内容时:

@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderRestTest {

    @Autowired
    private ObjectMapper objectMapper;

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private OAuthHelper oAuthHelper;

    private MockMvc mockMvc;

    @Before
    public void setup() {

        mockMvc = MockMvcBuilders
                .webAppContextSetup(context)
                .apply(springSecurity())
                .build();

    }

    @Test
    public void testSuperuserCanCreateOrder() throws Exception {

        RequestPostProcessor accessToken = oAuthHelper.addBearerToken("someSuperUser", "ROLE_SUPERUSER");

        Order order = new Order();
        order.salesMemo = "some sales memo";

        String responseFromTestRestTemplate = objectMapper.writeValueAsString(order);
        assertNotNull(responseFromTestRestTemplate);

        mockMvc.perform(
                post("/ErPApI/orders")
                        .with(accessToken)
                        .content(objectMapper.writeValueAsString(order))
                        .contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().is2xxSuccessful());

        mockMvc.perform(
                get("/ErPApI/orders")
                        .with(accessToken))

                .andExpect(jsonPath("_embedded.orders", hasSize(1)))
                .andExpect(jsonPath("_embedded.orders[0].salesMemo", is("some sales memo")))

                .andReturn();


    }

}

post成功,但响应正文为空。有没有办法用MockMvc模拟真实的响应?我的设置错误吗?

在请求中将
Accept
标题也设置为
application/json

如果不模拟服务器,这不是必需的,对吗?只是检查一下。还有一个属性可以强制返回新对象
spring.data.rest.returnbody on create=true
spring.data.rest.returnbody on update=true
。如果定义了,那就不是规则了。否则,仅当设置了Accept标头时才返回结果。