SpringMVC 常用注解 及 其用法 (下)

-----处理json问题,前端接受、发送json数据,或者控制器接收、发送json数据


需要包jackson-jr-all-2.4.3.jar;jackson-annotations-2.6.0.jar;jackson-core-2.6.0.jar;jackson-databind-2.6.0.jar
spring4如下配置
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
            <ref bean="mappingJackson2HttpMessageConverter" />  
        </list>  
    </property>  
</bean>  
<bean id="mappingJackson2HttpMessageConverter"   
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
    <property name="supportedMediaTypes">  
        <list>  
            <value>application/json;charset=UTF-8</value>  
            <value>text/html;charset=UTF-8</value>  
            <value>text/json;charset=UTF-8</value>      
        </list>  
    </property>  
 </bean> 

@ResponseBody 处理json时使用,用于将数据转换成json格式返回前端


@RequestBody 用于接受前端ajax发出的json数据


控制器内的方法通过map发送数据给前端,也可返回具体对象 等
eg.
@RequestMapping(value="/ajaxString.action")
	public @ResponseBody void loginUI(String name) throws Exception{
		
		System.out.println(name);	//也可通过request.getParameter("name");接收
	}
	@RequestMapping(value="/ajaxObject.action")
	public @ResponseBody Map loginUI1(@RequestBody User user) throws Exception{
		System.out.println(user.getName());
		Map<String,Object> map = new HashMap<>();
		map.put("msg", "asd");
		map.put("user", user);
		return map;
	}


//若是返回具体对象,则怎么写
/*	@RequestMapping(value="/ajaxObject.action")
	public @ResponseBody User loginUI1(@RequestBody User user) throws Exception{
		System.out.println(user.getName());
		user.setPassword("asdasdasdasda");
		return user;
	}*/

前端页面
<script type="text/javascript" src="/js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
	function doTest1(){
		$.ajax({
			url:"${basePath}/login/ajaxString.action",
			data:{"name":"阿斯顿"}, 
			type:"post",
			async:true,
			success:function(msg){
				alert(msg.msg);		//返回undefine,因为后台返回值卫void
			},
			
		});
	}
 	function doTest2(){
		data={"name":"2323"};
		$.ajax({
			url:"${basePath}/login/ajaxObject.action",
			type:"post",
			dataType:"json",
			contentType: 'application/json',
			data:JSON.stringify(data),
			async:true,
			success:function(msg){
				alert(msg.msg);		//返回后台设置的数据
				alert(msg.user.name);
				
			}
		});		 
	}
</script>
<a href="javascript:doTest2()" id="ajax" >ajax2</a>




----文件的上传下载上传,使用的是MultipartFile这个类来实现
1.导包commons-fileupload 和 commons.io
2.配置文件
<bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize" value="102400000"></property>
</bean>
3.前端 (注意enctype的值要写成multipart/form-data)
<form action="${basePath}/upload.action" method="post" enctype="multipart/form-data">
	<input type="file" name="file">
	<button type="submit">上传</button>
</form>
4.控制器
@RequestMapping(value="/upload.action")
	public String upload(HttpServletRequest request,@RequestParam("file") MultipartFile file) throws Exception{
		System.out.println(file.getName());		//表单按钮的name
		System.out.println(file.getOriginalFilename());		//上传的文件的名字
		if(!file.isEmpty())
		{
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
			//获取目录
			String path = request.getServletContext().getRealPath("/upload/");
			//为上传的文件命名
			String fileName = file.getOriginalFilename();
			String realFileName = sdf.format(new Date()) + fileName.substring(fileName.lastIndexOf("."));




			file.transferTo(new File(path + File.separator + realFileName));	//将上传的文件保存到一个目录中
		}
		return "/success.jsp";
	}

限制文件上传大小可以在配置文件设置
限制文件类型只能在控制器中获取文件名的后缀去判断


文件下载
1.前端页面
<a href="${basePath}/download.action?filename=QQ截图20170716131950.jpg">下载</a>
2.控制器
	@RequestMapping(value="/download.action")
	public ResponseEntity<byte[]> download(HttpServletRequest request,
					@RequestParam("filename") String filename) throws Exception{
		//获取下载路径
		String filePath = request.getServletContext().getRealPath("/upload/");
		File file = new File(filePath + File.separator + filename);
		
		//http头
		HttpHeaders headers = new HttpHeaders(); 

		//下载显示的文件名,不然下载时浏览器识别不了中文
       		String downloadFielName = new String(filename.getBytes("UTF-8"),"ISO8859-1");

		//设置相应报头,通知浏览器以attachment(下载方式)打开图片
        	headers.setContentDispositionFormData("attachment", downloadFielName); 

        	//application/octet-stream : 二进制流数据(最常见的文件下载)。
        	headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        	return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
	}


-----路径跳转 、数据共享问题
springmvc 中
在返回值String方法的 return里写,return "forward:另一个action的路径"属于请求转发
return "redirect:另一个action的路径" 属于url重定向,重定向无法共享request域参数,但是return "redirect:另一个action的路径?参数名=参数值",这样也可以共享,或者放在session中


在控制器类 方法里的参数列表中,可以通过声明 HttpServletRequest request, HttpServletResopnse response, HttpServletSession session 来调用 这些 传统api中的方法处理


-----

处理编码问题
处理编码问题需要在web.xml里设置编码过滤器只解决post方式
<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

注意要写在前面,不然可能会出现先经过spring处理而导致编码设置失效



-----其他的
加载静态资源,如图片,css,js之类的
<mvc:resources location="" mapping="" />
mapping:映射
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)


当有spring和springmvc注解时,为了不发生注解读取失效,需要加入下面这句,表示不读取下面的注解,放给其他文件读取
比如在spring配置文件中加入下面语句,表示不读取springmvc的注解,让springmvc配置文件去读取(即在springmvc配置文件中需要配置注解扫描)
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值