【问题标题】:MockMvc does not return created resource in post responseMockMvc 在响应后不返回创建的资源
【发布时间】:2019-02-07 11:29:41
【问题描述】:

通常,当您发布到 spring 数据休息端点时,响应包含位置标头,其中包含指向新创建资源的 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();


    }

}

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

【问题讨论】:

    标签: spring spring-boot spring-data-rest spring-boot-test mockmvc


    【解决方案1】:

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

    【讨论】:

    • 这在不模拟服务器时不是必需的,对吧?只是检查。
    • 还有一个属性可以强制返回新对象。 spring.data.rest.return-body-on-create=truespring.data.rest.return-body-on-update=true。如果它被定义,那么这不是规则。否则只有在设置了 Accept 标头时才返回结果。
    猜你喜欢
    • 2020-01-18
    • 2021-01-13
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多