1. 程式人生 > >Resolved exception caused by Handler execution: org.springframework.web.HttpMediaTypeNotSupported...

Resolved exception caused by Handler execution: org.springframework.web.HttpMediaTypeNotSupported...

@Controller 註解類中,方法使用 @RequestBody 註解接收表單提交的引數丟擲異常。

    @PostMapping(value = "/user/search")
    public ModelAndView searchUser(@RequestBody UserQueryDTO queryDTO) {
        log.info("Search User Request : {}", queryDTO);
        if (queryDTO == null) throw new RequestParamException();
        ModelAndView modelAndView =
new ModelAndView(); modelAndView.setViewName("user/list"); Page<UserDTO> userDTOPage = userServiceImpl.searchUser(queryDTO, 0, 10); modelAndView.addObject("queryDTO", queryDTO); modelAndView.addObject("userDTOPage", userDTOPage); return modelAndView; }

伺服器丟擲如下異常:

2018-10-10 11:04:58.203  WARN 3092 --- [nio-8081-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 

介面顯示異常:

There was an unexpected error (type=Unsupported Media Type, status=415).
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 

原來 @RequestBody 註解常用來處理 content-type 是 application/json 編碼的內容,而不能用來處理 application/x-www-form-urlcoded 編碼的內容。這裡可以使用 @ModelAttribute 註解代替。

    @PostMapping(value = "/user/search")
    public ModelAndView searchUser(@ModelAttribute UserQueryDTO queryDTO) {
        log.info("Search User Request : {}", queryDTO);
        if (queryDTO == null) throw new RequestParamException();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("user/list");
        Page<UserDTO> userDTOPage = userServiceImpl.searchUser(queryDTO, 0, 10);    
        modelAndView.addObject("queryDTO", queryDTO);
        modelAndView.addObject("userDTOPage", userDTOPage);
        return modelAndView;
    }

參考文章: