當前位置:首頁 » 文件管理 » javarestful文件上傳

javarestful文件上傳

發布時間: 2023-05-05 16:18:44

① springmvc怎麼實現restful

restful 是一個風格而不是一個標准,在springmvc web開發中可以說是
興起於Rails的一種優雅的URI表述方式,是資源的狀態和狀態轉移的描述。

springmvc rest 實現

springmvc的resturl是通過@RequestMapping 及@PathVariable
annotation提供的,通過如@RequestMapping(value="/blog
/{id}",method=RequestMethod.DELETE)即可處理/blog/1 的delete請求.

java代碼
@RequestMapping(value="/blog/{id}",method=RequestMethod.DELETE)
public ModelAndView delete(@PathVariable Long id,HttpServletRequest request,HttpServletResponse response) {
blogManager.removeById(id);
return new ModelAndView(LIST_ACTION);
}

@RequestMapping @PathVariable如果URL中帶參數,則配合使用,如

Java代碼
@RequestMapping(value="/blog/並燃{blogId}/message/{msgId}",method=RequestMethod.DELETE)
public ModelAndView delete(@PathVariable("blogId") Long blogId,@PathVariable("msgId") Long msgId,HttpServletRequest request,HttpServletResponse response) {
}

spring rest配置指南

1. springmvc web.xml配置

Xml代碼
<!-- 該
servlet為tomcat,jetty等容器提供,將靜態資源映射從/改為/static/目錄,如原來訪問 http://localhost
/foo.css ,現在http://localhost/static/foo.css -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</陸蔽虛servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- URL重寫filter,用於將訪問靜態資源http://localhost/foo.css 轉為http://localhost/早燃static/foo.css -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>60</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 覆蓋default servlet的/, springmvc servlet將處理原來處理靜態資源的映射 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 瀏覽器不支持put,delete等method,由該filter將/blog?_method=delete轉換為標準的http delete方法 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping>

2. webapp/WEB-INF/springmvc-servlet.xml配置,使用如下兩個class激活@RequestMapping annotation

Java代碼
<bean class="org.springframework.web.servlet.mvc.annotation."/>
<bean class="org.springframework.web.servlet.mvc.annotation."/>

完整配置

Java代碼
<beans default-autowire="byName" >

<!-- 自動搜索@Controller標注的類 -->
<context:component-scan base-package="com.**.controller"/>

<bean class="org.springframework.web.servlet.mvc.annotation."/>

<bean class="org.springframework.web.servlet.mvc.annotation."/>

<!-- Default ViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/pages"/>
<property name="suffix" value=".jsp"></property>
</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="i18n/messages"/>

<!-- Mapping exception to the handler view -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.">
<!-- to /commons/error.jsp -->
<property name="defaultErrorView" value="/commons/error"/>
<property name="exceptionMappings">
<props>
</props>
</property>
</bean>

</beans>

3. Controller編寫

Java代碼
/**
* @RequestMapping("/userinfo") 具有層次關系,方法級的將在類一級@RequestMapping之一,
* 如下面示例, 訪問方法級別的@RequestMapping("/new"),則URL為 /userinfo/new
*/
@Controller
@RequestMapping("/userinfo")
public class UserInfoController extends BaseSpringController{
//默認多列排序,example: username desc,createTime asc
protected static final String DEFAULT_SORT_COLUMNS = null;

private UserInfoManager userInfoManager;

private final String LIST_ACTION = "redirect:/userinfo";

/**
* 通過spring自動注入
**/
public void setUserInfoManager(UserInfoManager manager) {
this.userInfoManager = manager;
}

/** 列表 */
@RequestMapping
public ModelAndView index(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) {
PageRequest<Map> pageRequest = newPageRequest(request,DEFAULT_SORT_COLUMNS);
//pageRequest.getFilters(); //add custom filters

Page page = this.userInfoManager.findByPageRequest(pageRequest);
savePage(page,pageRequest,request);
return new ModelAndView("/userinfo/list","userInfo",userInfo);
}

/** 進入新增 */
@RequestMapping(value="/new")
public ModelAndView _new(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) throws Exception {
return new ModelAndView("/userinfo/new","userInfo",userInfo);
}

/** 顯示 */
@RequestMapping(value="/{id}")
public ModelAndView show(@PathVariable Long id,HttpServletRequest request,HttpServletResponse response) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
return new ModelAndView("/userinfo/show","userInfo",userInfo);
}

/** 編輯 */
@RequestMapping(value="/{id}/edit")
public ModelAndView edit(@PathVariable Long id,HttpServletRequest request,HttpServletResponse response) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
return new ModelAndView("/userinfo/edit","userInfo",userInfo);
}

/** 保存新增 */
@RequestMapping(method=RequestMethod.POST)
public ModelAndView create(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) throws Exception {
userInfoManager.save(userInfo);
return new ModelAndView(LIST_ACTION);
}

/** 保存更新 */
@RequestMapping(value="/{id}",method=RequestMethod.PUT)
public ModelAndView update(@PathVariable Long id,HttpServletRequest request,HttpServletResponse response) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
bind(request,userInfo);
userInfoManager.update(userInfo);
return new ModelAndView(LIST_ACTION);
}

/** 刪除 */
@RequestMapping(value="/{id}",method=RequestMethod.DELETE)
public ModelAndView delete(@PathVariable Long id,HttpServletRequest request,HttpServletResponse response) {
userInfoManager.removeById(id);
return new ModelAndView(LIST_ACTION);
}

/** 批量刪除 */
@RequestMapping(method=RequestMethod.DELETE)
public ModelAndView batchDelete(@RequestParam("items") Long[] items,HttpServletRequest request,HttpServletResponse response) {

for(int i = 0; i < items.length; i++) {

userInfoManager.removeById(items[i]);
}
return new ModelAndView(LIST_ACTION);
}

}

上面是rapid-framework 新版本生成器生成的代碼,以後也將應用此規則,rest url中增刪改查等基本方法與Controller的方法映射規則

Java代碼
/userinfo => index()
/userinfo/new => _new()
/userinfo/{id} => show()
/userinfo/{id}/edit => edit()
/userinfo POST => create()
/userinfo/{id} PUT => update()
/userinfo/{id} DELETE => delete()
/userinfo DELETE => batchDelete()

注(不使用 /userinfo/add => add() 方法是由於add這個方法會被maxthon瀏覽器當做廣告鏈接過濾掉,因為包含ad字元)

4. jsp 編寫

Html代碼
<form:form action="${ctx}/userinfo/${userInfo.userId}" method="put">
</form:form>

生成的html內容如下, 生成一個hidden的_method=put,並於web.xml中的HiddenHttpMethodFilter配合使用,在服務端將post請求改為put請求

Java代碼
<form id="userInfo" action="/springmvc_rest_demo/userinfo/2" method="post">
<input type="hidden" name="_method" value="put"/>
</form>

另外一種方法是你可以使用ajax發送put,delete請求.

5. 靜態資源的URL重寫

如上我們描述,現因為將default servlet映射至/static/的子目錄,現我們訪問靜態資源將會帶一個/static/前綴.

如 /foo.gif, 現在訪問該文件將是 /static/foo.gif.
那如何避免這個前綴呢,那就是應用URL rewrite,現我們使用 http://tuckey.org/urlrewrite/, 重寫規則如下

Xml代碼
<urlrewrite>
<!-- 訪問jsp及jspx將不rewrite url,其它.js,.css,.gif等將重寫,如 /foo.gif => /static/foo.gif -->
<rule>
<condition operator="notequal" next="and" type="request-uri">.*.jsp</condition>
<condition operator="notequal" next="and" type="request-uri">.*.jspx</condition>
<from>^(/.*\..*)$</from>
<to>/static$1</to>
</rule>
</urlrewrite>

另筆者專門寫了一個 RestUrlRewriteFilter來做同樣的事件,以後會隨著rapid-framework一起發布. 比這個更加輕量級.

並且該代碼已經貢獻給spring,不知會不會在下一版本發布

在線DEMO地址: http://demo.rapid-framework.org.cn:8080/springmvc_rest_demo/userinfo

② JAVA中怎樣把後台的值傳到前台 例如:

以微信小程序為例,java後台與微信小程序前台頁面,弊氏主要是通過restful介面進行交互,詳細步驟:

1、之前已經探討了如何快速創建springboot的項目,可以參考下面的地址,主要是修改pom.xml文件,之前引用了spring-boot-starter,這里因為是要創建restFul介面,所以需要引用spring-boot-starter-web。

③ restful api上傳文件

不太清楚你寫這個借口的目的是什麼,一般我們做上傳都是前端通過控制項上傳後得到路徑,然後調用一個方法將路徑保存就可以了。你這個借口的目的是什麼?

先調用介面獲得路徑是保存路徑不一樣的情況才這樣做的。如果上傳的路徑是一樣的就沒有那個必要再去調用一次了

④ java restful是什麼意思

就是soringmvc把*do改為/

⑤ 如何使用RestTemplate訪問restful服務

一. 什麼是RestTemplate
傳統情況下在Java代碼里訪問restful服務,一般使用Apache的HttpClient。不過此種方法使用起來太過繁瑣。spring提供了一種簡單便捷的模板類來進行操作,這就是RestTemplate。
二、舉個例子。 //請求地址
String url = "http://localhost:8080/testPost";
//入參
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");

RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
從這個例子可以看出,使用restTemplate訪問restful介面非常的簡單粗暴無腦。(url,
requestMap, ResponseBean.class)這三個參數分別代表 請求地址、請求參數、HTTP響應轉換被轉換成的對象類型。
RestTemplate方法的名稱遵循命名約定,第一部分指出正在調用什麼HTTP方法,第二部分指示返回的內容。本例中調用了restTemplate.postForObject方法,post指調用了HTTP的post方法,Object指將HTTP響應轉換為您選擇的對象類型。
三.手動指定轉換器(HttpMessageConverter)

我們知道,調用reseful介面傳遞的數據內容是json格式的字汪團御符串,返回的響應也是json格式的字元串。然而restTemplate.postForObject方法的請求參數RequestBean和返回參數ResponseBean卻都是java類。是RestTemplate通過HttpMessageConverter自動幫我們做了轉換的操作。

默認情況下RestTemplate自動幫我們注冊了一組HttpMessageConverter用來處理一些不同的contentType的請求。
如StringHttpMessageConverter來處理text/plain;來處理application/json;來處理application/xml。
你可以在org.springframework.http.converter包下找到所有spring幫我們實現好的轉換器。
如果現有的轉換器不能滿足你的需求,你還可以實現org.springframework.http.converter.HttpMessageConverter介面自己寫一個。
四.設置底層連接方式
要創建一個RestTemplate的實例,您可以簡單地調用默認的無參數構造函數。這將使用java.NET包中的標准Java類作為底層實現來創建HTTP請求。

但很多時候我們需要像傳統的HttpClient那樣設置HTTP請求的一些屬性。RestTemplate使用了一種很偷懶的方式實現了這個需求,那就是直接使用一個HttpClient作為底層實現......
五.設置或橋攔截器(ClientHttpRequestInterceptor)
有時候我們需要對請求做一些通用的攔截設置,這就可以使用攔截器進行處困岩理。攔截器需要我們實現org.springframework.http.client.ClientHttpRequestInterceptor介面自己寫。

以上是如何使用RestTemplate方便快捷的訪問restful介面。其實RestTemplate的功能非常強大

⑥ 如何在Java客戶端調用RESTful服務


publicstaticvoidmain(String[]args){
飢歲告Storestore=newStore();//准備參數
//首先創建一個webservice客戶端,參數依次為:webservice的url,webservice的名稱,webservice的方法,參數列表,返回類型,泛型的類型(不需要泛型就傳入null)
WebserviceClientclient=newWebserviceClient(","store","find",newObject[]{store},List.class,Store.class);
List<Store>list=client.execute();//調用webservice
System.out.println("從伺服器返雀納回"+list.size()+"個商品");//得到了服務端返回的數據
}
爛明

把里邊鏈接和參數換掉

⑦ java使用restful格式有什麼好處

好處:
1.REST規范:強調HTTP應當以資源為中心,好帶並且規范了資源URI的風格;
2.規范了HTTP請求動作(PUT,POST等)的使用,具有對應的語義;
3.遵循REST規范的Web應用將會獲得下面好處:

a.URL具有很強可讀性信襪賀的,具有自描述性;
b.資源描述與視圖的松耦合;
c.可提供OpenAPI,便於第三方系統集成,提高互操作滑派性;
d.如果提供無狀態的服務介面,可提高應用的水平擴展性;

⑧ java做的restful通過(API key或者token)認證方式的代碼是怎樣的最好能提供例子,坐等高手回答,急急急!

你提供一個n位的字元串,讓客戶調用的時候傳遞過去,讓人的伺服器驗證是否你提供的。——當然這個字串是有演算法的,不是隨便寫的。

⑨ java怎麼做restful介面

restful只是一種路由風格,豎升明使用路由來控製版本或者操作,一種規范吧,對笑腔於代碼沒有餘告具體的嚴格的語法規則,只是再介面命名上有區別

⑩ spring mvc restful能上傳多大文件

SpringMVC本身對Restful支持非常好。它的@RequestMapping、@RequestParam、@PathVariable、@ResponseBody註解很好的支持了REST。18.2CreatingRESTfulservices1.@RequestMappingSpringusesthe@.類似於struts的action-mapping。可以指定POST或者GET。2.@PathVariableThe@.用於抽取URL中的信息作為參數。(注意,不包括請求字元串,那是@RequestParam做的事情。)@RequestMapping("/owners/{ownerId}",method=RequestMethod.GET)publicStringfindOwner(@PathVariableStringownerId,Modelmodel){//}如果變數名與pathVariable名不一致,那麼需要指定:@RequestMapping("/owners/{ownerId}",method=RequestMethod.GET)publicStringfindOwner(@PathVariable("ownerId")StringtheOwner,Modelmodel){//implementationomitted}@,long,.3.@RequestParam官方文檔居然沒有對這個註解進行說明,估計是遺漏了(真不應該啊)。這個註解跟@PathVariable功能差不多,只是參數值的來源不一樣而已。它的取值來源是請求參數(querystring或者post表單欄位)。對了,因為它的來源可以是POST欄位,所以它支持更豐富和復雜的類型信息。比如文件對象:@RequestMapping("/imageUpload")(@RequestParam("name")Stringname,@RequestParam("description")Stringdescription,@RequestParam("image")MultipartFileimage)throwsIOException{this.imageDatabase.storeImage(name,image.getInputStream(),(int)image.getSize(),description);return"redirect:imageList";}還可以設置defaultValue:@RequestMapping("/imageUpload")(@RequestParam(value="name",defaultValue="arganzheng")Stringname,@RequestParam("description")Stringdescription,@RequestParam("image")MultipartFileimage)throwsIOException{this.imageDatabase.storeImage(name,image.getInputStream(),(int)image.getSize(),description);return"redirect:imageList";}4.@RequestBody和@ResponseBody這兩個註解其實用到了Spring的一個非常靈活的設計——HttpMessageConverter18.3.2HTTPMessageConversion與@RequestParam不同,@RequestBody和@ResponseBody是針對整個HTTP請求或者返回消息的。前者只是針對HTTP請求消息中的一個name=value鍵值對(名稱很貼切)。HtppMessageConverter負責將HTTP請求消息(HTTPrequestmessage)轉化為對象,或者將對象轉化為HTTP響應體(HTTPresponsebody)。{//.booleansupports(Classclazz);//.ListgetSupportedMediaTypes();//,andreturnsit.Tread(Classclazz,HttpInputMessageinputMessage)throwsIOException,;//.voidwrite(Tt,)throwsIOException,;}SpringMVC對HttpMessageConverter有多種默認實現,基本上不需要自己再自定義--convertsformdatato/--convertto/fromajavax.xml.transform.-convertto/-convertto/fromJSONusingJackson'sObjectMapperetc然而對於RESTful應用,用的最多的當然是。但是不是默認的HttpMessageConverter:lementsHandlerAdapter,Ordered,BeanFactoryAware{(){//(false);//SeeSPR-=newStringHttpMessageConverter();stringHttpMessageConverter.setWriteAcceptCharset(false);this.messageConverters=newHttpMessageConverter[]{(),stringHttpMessageConverter,newSourceHttpMessageConverter(),()};}}如上:默認的HttpMessageConverter是ByteArrayHttpMessageConverter、stringHttpMessageConverter、SourceHttpMessageConverter和轉換器。所以需要配置一下:text/plain;charset=GBK配置好了之後,就可以享受@Requestbody和@ResponseBody對JONS轉換的便利之處了:@RequestMapping(value="api",method=RequestMethod.POST)@(@RequestBodyApiapi,@RequestParam(value="afterApiId",required=false)IntegerafterApiId){Integerid=apiMetadataService.addApi(api);returnid>0;}@RequestMapping(value="api/{apiId}",method=RequestMethod.GET)@ResponseBodypublicApigetApi(@PathVariable("apiId")intapiId){returnapiMetadataService.getApi(apiId,Version.primary);}一般情況下我們是不需要自定義HttpMessageConverter,不過對於Restful應用,有時候我們需要返回jsonp數據:packageme.arganzheng.study.springmvc.util;importjava.io.IOException;importjava.io.PrintStream;importorg.codehaus.jackson.map.ObjectMapper;importorg.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;importorg.springframework.http.HttpOutputMessage;importorg.springframework.http.converter.;importorg.springframework.http.converter.json.;importorg.springframework.web.context.request.RequestAttributes;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;{(){ObjectMapperobjectMapper=newObjectMapper();objectMapper.setSerializationConfig(objectMapper.getSerializationConfig().withSerializationInclusion(Inclusion.NON_NULL));setObjectMapper(objectMapper);}@(Objecto,)throwsIOException,{StringjsonpCallback=null;RequestAttributesreqAttrs=RequestContextHolder.currentRequestAttributes();if(){jsonpCallback=((ServletRequestAttributes)reqAttrs).getRequest().getParameter("jsonpCallback");}if(jsonpCallback!=null){newPrintStream(outputMessage.getBody()).print(jsonpCallback+"(");}super.writeInternal(o,outputMessage);if(jsonpCallback!=null){newPrintStream(outputMessage.getBody()).println(");");}}}

熱點內容
編程凸輪 發布:2025-02-13 05:38:21 瀏覽:691
判斷素數的編程 發布:2025-02-13 05:29:25 瀏覽:618
androidaes加密 發布:2025-02-13 05:08:36 瀏覽:493
李宗瑞文件夾 發布:2025-02-13 04:27:59 瀏覽:611
phpparent的parent 發布:2025-02-13 04:18:08 瀏覽:457
小容量存儲器市場 發布:2025-02-13 04:01:11 瀏覽:373
ickeck文件夾 發布:2025-02-13 04:00:21 瀏覽:644
上傳照片文案 發布:2025-02-13 03:53:13 瀏覽:426
電腦版花雨庭怎麼調中文伺服器 發布:2025-02-13 03:32:35 瀏覽:39
linux開發android 發布:2025-02-13 03:32:34 瀏覽:491