我正在嘗試測驗來自我的 CompanyController 的“補丁請求”,該控制器具有 Map 和 Id 作為引數。我希望得到一個 http 狀態 200,但我得到一個 http 狀態 400。有人可以向我解釋我做錯了什么嗎?謝謝你
CompanyController(部分代碼省略):
@RestController
public class CompanyController {
@Autowired
private CompanyService companyService;
@PatchMapping("companies/{id}")
public ResponseEntity<CompanyDTO> patchUpdateCompany(@PathVariable Integer id,
@RequestBody Map<String, Object> updates) throws JsonMappingException {
Optional<CompanyDTO> optionalCompanyDTO = this.companyService.patchUpdateCompany(updates, id);
return ResponseEntity.ok(optionalCompanyDTO.get());
}
}
CompanyControllerTest(部分代碼省略)
@WebMvcTest(CompanyController.class)
public class CompanyControllerTest {
@MockBean
private CompanyService companyService;
@Autowired
private MockMvc mockMvc;
private static List<CompanyDTO> companyDTOList;
@BeforeAll
public static void beforeAll(){
companyDTOList = new ArrayList<>();
CompanyDTO companyDTO1 = CompanyDTO.builder().id(1).name("xavi").build();
CompanyDTO companyDTO2 = CompanyDTO.builder().id(2).name("marteta").build();
companyDTOList.add(companyDTO1);
companyDTOList.add(companyDTO2);
}
@Test
void givenMapAndIdWhenPatchUpdateCompanyThenReturnHttpStatusOk() throws Exception {
Mockito.when(this.companyService.getCompanyById(1)).thenReturn(Optional.of(companyDTOList.get(0)));
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.add("name", "xavi2");
this.mockMvc.perform(patch("/companies/1")
.contentType(MediaType.APPLICATION_JSON)
.params(requestParams))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", Matchers.is("xavi2")));
}
}
uj5u.com熱心網友回復:
你的問題在這里
this.mockMvc.perform(patch("/companies/1")
.contentType(MediaType.APPLICATION_JSON)
.params(requestParams)) <---------------------
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", Matchers.is("xavi2")));
}
您將資料作為請求引數傳遞。但是在您的 API 中,您的@RequestBody意思是它希望在 http 請求正文中獲取資料,而不是作為請求引數。
這就是為什么您面臨400錯誤含義Bad Request,這是由于 Spring 匹配了 URL 路徑以及 http 方法型別而導致的,但您的請求中未提供 API 方法簽名中的其他內容。
因此,您應該使用該.content(requestParams)方法在您將發送的請求正文中設定您想要的內容
相關檔案
否則,您的 API 應該使用@RequestParam而不是@RequestBody像以前從 test 發送的請求引數那樣接收輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/461184.html
