您好,登錄后才能下訂單哦!
首先先貼原代碼和報錯提示
1.在web.xml配置文件中配置HiddenHttpMethodFilter,它的作用是能把POST請求轉換為PUT或DELETE請求。
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
HiddenHttpMethodFilter
/*
2.配置視圖解析器
3.在JSP頁面中發送PUT或DELETE請求。注意表單中method必須為post,隱藏域中name和value屬性如下所示:
4.在目標方法中接收請求。
@RequestMapping("/SpringMVC")
@Controller
public class SpringMVCTest {
private static final String Success = "Success";
@RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)
@ResponseBody
public String testRestPut(@PathVariable Integer id) {
System.out.println("testRest Put:"+id);
return Success;
}
@RequestMapping(value="/testRest/{id}", method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest Delete:"+id);
return Success;
}
}無錫婦科醫院排行榜 http://mobile.chfk120.com
4.正常來說是可以跳轉到Success.jsp頁面的,但是卻出現了錯誤(我就只貼文字了)
HTTP Status 405 – Method Not Allowed
Type Status Report
消息 JSP 只允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS
描述 請求行中接收的方法由源服務器知道,但目標資源不支持
Apache Tomcat/9.0.20
5.原因分析:JSP只支持GET與POST請求,而我們發起的是REST風格的請求,同樣調用了PUT與DELETE方法,JSP無法解析。
6.解決方法:為controller里的testRestPut和tsetRestDelete方法添加**@ResponseBody注解**。如下所示:
@RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)
@ResponseBody
public String testRestPut(@PathVariable Integer id) {
System.out.println("testRest Put:"+id);
return Success;
}
@RequestMapping(value="/testRest/{id}", method=RequestMethod.DELETE)
@ResponseBody
public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest Delete:"+id);
return Success;
}
然后上網查閱了@responseBody注解的作用,這里大致貼一段:
-)將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據。添加此注解后,直接將數據寫入到輸入流,不會再走視圖處理器。他的效果等同于通過response對象輸出指定格式的數據。
添加注解之后順利解決問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。