我有一个简单的控制器REST:
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeRepository repository;
@GetMapping("")
List<Employee> all() {
return repository.findAll();
}
@GetMapping("/{id}")
Employee one(@PathVariable Long id) {
return repository
.findById(id)
.orElseThrow(() -> new EmployeeNotFoundException(id));
}
}
我还为此控制器编写了一个测试。
public class EmployeeControllerTest {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.build();
}
@Test
public void all() throws Exception {
this.mockMvc.perform(get("/employees"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[0].id", is(1)))
.andExpect(jsonPath("$[0].name", is("John")))
.andExpect(jsonPath("$[0].role", is("admin")))
.andExpect(jsonPath("$[1].id", is(2)))
.andExpect(jsonPath("$[1].name", is("Mike")))
.andExpect(jsonPath("$[1].role", is("user")));
}
@Test
public void one() throws Exception {
int id = 1;
this.mockMvc.perform(get("/employees/{id}", id))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("id", is(1)))
.andExpect(jsonPath("name", is("John")))
.andExpect(jsonPath("role", is("admin")));
}
}
但是问题是路线“ / employees”的名称重复过多。 如果有更改路线名称的要求,我将不得不更改一百个测试。太糟糕了。
在使用基本路由和参数时,也如何消除重复,此处仅使用一个参数{id}。 但是可能还需要更改参数名称。
请告诉您如何组织代码并消除重复。
答案 0 :(得分:1)
我认为最好的解决方案是引入一个
public static final String PATH = "/employees";
中的变量EmployeeController
,因此您可以在任何地方引用“ /员工”路径
答案 1 :(得分:0)
您可以使用
EmployeeController.class.getAnnotation(RequestMapping.class).value()[0];
从控制器的@RequestMapping(“ / employees”)获取路径
“ /员工”