全能編程開發工程師手把手教你寫controller層

一、什麼是controller層

在MVC架構中,controller層是應用程序的控制器,主要作用是把前端的請求映射到後端的具體處理方法上。

在Spring框架中,controller層通常使用註解@Controller來定義,每個方法都對應一個具體的請求路徑(@RequestMapping),方法的返回值通常是一個視圖或者數據模型對象。

下面是一個簡單的controller示例:

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public String list(Model model) {
        List userList = userService.getAllUsers();
        model.addAttribute("userList", userList);
        return "user/list";
    }

    @RequestMapping("/add")
    public String add(Model model) {
        model.addAttribute("user", new User());
        return "user/form";
    }

    @RequestMapping("/save")
    public String save(@ModelAttribute("user") User user) {
        userService.saveUser(user);
        return "redirect:/user/list";
    }

    @RequestMapping("/edit/{id}")
    public String edit(@PathVariable("id") Long id, Model model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user/form";
    }

    @RequestMapping("/delete/{id}")
    public String delete(@PathVariable("id") Long id) {
        userService.deleteUserById(id);
        return "redirect:/user/list";
    }
}

二、controller層的工作流程

controller層通常作為應用程序的入口,它接收前端的請求,將請求參數轉發給業務邏輯層進行處理,最終返回數據模型或者視圖給前端頁面。

下面是一個典型的controller層的工作流程:

  • 前端向後端發送HTTP請求。
  • 請求被映射到對應的controller方法。
  • controller方法解析請求參數,根據業務邏輯調用對應的服務層方法。
  • 服務層方法處理業務邏輯,返回數據模型或結果碼。
  • controller方法根據服務層的返回結果構造HTTP響應,並將結果傳遞給前端。

三、controller層的網絡請求處理

在controller層中,我們通常使用註解@RequestMapping來標記處理請求的方法。通過@RequestMapping註解可以指定請求URL、請求方法、請求參數等一系列參數。

下面是一個@RequestMapping註解的用法示例:

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET, params = {"name=admin"})
@ResponseBody
public User getUserById(@PathVariable("id") Long id) {
    return userService.getUserById(id);
}
  • value:指定請求URL路徑,可以是絕對路徑或相對路徑。
  • method:指定請求方法,可以是GET、POST、PUT、DELETE等HTTP請求方法。
  • params:指定請求參數,可以是一個或多個參數值。
  • @PathVariable:用於獲取URL路徑中的參數值。
  • @RequestParam:用於獲取請求參數中的參數值。
  • @RequestBody:用於獲取請求體中的參數值。
  • @ResponseBody:用於將方法的返回值序列化成JSON字符串並返回給前端。

四、controller層的異常處理

在controller層中,我們通常會對請求過程中可能出現的異常進行處理,以保證應用程序的健壯性和穩定性。

下面是一個異常處理的controller示例:

@ControllerAdvice
public class ExceptionHandlerAdvice {
    @ExceptionHandler(Exception.class)
    public ResponseEntity handleException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("系統錯誤:" + e.getMessage());
    }

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity handleUserNotFoundException(UserNotFoundException e) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
    }
}

在上述代碼中,@ControllerAdvice註解表示該類是全局異常處理類,@ExceptionHandler註解表示該方法處理指定的異常類型。

在實際編程過程中,我們應該根據具體的業務需求對異常進行詳細的分類和處理。

五、controller層的單元測試

在controller層中,單元測試通常使用mockMvc來模擬HTTP請求並對返回結果進行斷言。mockMvc可以有效地模擬接口請求、參數設置、返回結果驗證等功能。

下面是一個mockMvc單元測試的示例:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@AutoConfigureMockMvc
public class UserControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetUserById() throws Exception {
        MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/user/123").param("name", "admin"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.id", Matchers.is(123)))
                .andReturn();
        String content = result.getResponse().getContentAsString();
        System.out.println(content);
    }
}

在上述代碼中,@RunWith註解表示使用SpringRunner作為測試運行器,@SpringBootTest註解表示啟動Spring應用上下文,@AutoConfigureMockMvc註解表示自動配置MockMvc。

testGetUserById()方法模擬了一個HTTP GET請求,並驗證了返回結果的狀態碼和JSON屬性值是否正確。

六、controller層的安全性考慮

在controller層中,安全性問題非常關鍵,我們需要注意以下幾點:

  • 禁止在controller層中使用明文密碼和敏感信息。
  • 避免使用GET請求傳遞敏感數據,儘可能使用POST方法。
  • 使用token、JWT等方式進行用戶身份驗證和權限控制。
  • 前後端交互過程中使用HTTPS協議,保證數據傳輸的安全性。

七、總結

以上就是全能編程開發工程師手把手教你寫controller層的全部內容,希望對大家有所幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183551.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:46
下一篇 2024-11-25 05:47

相關推薦

發表回復

登錄後才能評論