Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
Can not attach body to my POST request using Spring MockMvc

I'm trying to test my rest controller. No issues with GETs, but when I try to test a POST method I'm unable to attach the body.

private static final MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(),
                                                            MediaType.APPLICATION_JSON.getSubtype(),
                                                            Charset.forName("utf8"));
private ObjectMapper jsonMapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);

@Test
public void test1() throws Exception {
    //...Create DTO
    //...Create same pojo but as entity

    when(serviceMock.addEntity(e)).thenReturn(e);

    mvc.perform(post("/uri")
        .contentType(contentType)
        .content(jsonMapper.writeValueAsString(dto))
        )
        .andDo(print())
        .andExpect(status().isCreated())
        .andExpect(content().contentType(contentType)); //fails because there is no content returned
}

This is the request output:

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /uri
       Parameters = {}
          Headers = {Content-Type=[application/json;charset=UTF-8]}

There is no body. Why? I have printed jsonMapper.writeValueAsString(dto) and is not null.

edit:

Adding controller code:

@RestController
@RequestMapping("/companies")
public class CompanyController {

    @Autowired
    private CompanyService service;
    @Autowired
    private CompanyMapper mapper;



    @RequestMapping(method=RequestMethod.GET)
    public List<CompanyDTO> getCompanies() {
        List<Company> result = service.getCompanies();
        return mapper.toDtoL(result);
    }   

    @RequestMapping(method=RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public CompanyDTO createCompany(@RequestBody @Valid CompanyDTO input) {
        Company inputE = mapper.toEntity(input);
        Company result = service.addCompany(inputE);
        return mapper.toDto(result);
    }
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Solved.

  1. The mock call should use any instead of a concrete object: when(serviceMock.addCompany(any(Company.class))).thenReturn(e);

  2. I needed to override the equals method of the entity class to pass this statement: verify(serviceMock, times(1)).addCompany(e);

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda