Spring MVC – 高级 @RequestMapping 选项

  除了使用URL模板之外,@RequestMapping 注解也支持 Ant-style 风格的路径(例如:/myPath/*.do)。两种风格混合使用也是支持的(例如:/owners/*/pets/{petId})。

  如果路径没有明确指定映射,这时候就靠方法名来识别,依照 MethodNameResolver 类来处理(默认情况下是 InternalPathMethodNameResolver 类),这只适用于注解的路径不匹配请求的路径。换句话说,只用于减小其中一系列的匹配规则,不构成映射的首选。

  如果有一个没有指明映射路径的方法,那么同样所有的没有指明映射方法的请求都将调用它。如果有多个方法,也会依据方法名来选择。

  可以在请求路径中加入些参数来减小映射范围,例如加上"myParam=myValue"之类的参数(注:类似 struts 的method=methodName),这样请求就会映射到存在对应value参数的方法,例如:

@Controller 
@RequestMapping("/owners/{ownerId}") 
public class RelativePathUriTemplateController {
  @RequestMapping(value = "/pets/{petId}", params="myParam=myValue") 
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted 
  } 
}

  "myParam" 这样的参数风格是支持的,当在请求中的参数中包含的时候(可以使用任何的值)。最后说下,"!myParam"参数风格指定了它不应该出现在请求路径中。

  同样的,请求头(header)也能用于减小映射路径范围。

@Controller 
@RequestMapping("/owners/{ownerId}") 
public class RelativePathUriTemplateController {
  @RequestMapping(value = "/pets", method = RequestMethod.POST, headers="content-type=text/*") 
  public void addPet(Pet pet, @PathVariable String ownerId) {    
    // implementation omitted 
  } 
}

  在上面的例子中,addPet() 方法只在 content-type 匹配 text/* 才会被调用,例如:text/xml。

  原文:link

Spring MVC – URI Templates

  在spring mvc中通过url路径来访问控制器中的方法,可以在用@RequestMapping注解的路径中使用URI模板。使用@PathVariable注解来指明方法中的参数应该对应URI模板中的变量,如下例子:

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner"; 
}

  URI模板”/owners/{ownerId}”指定了变量名为ownerId。当方法被请求的时候ownerId的值会被赋值为请求的URI,比如一个请求为/owners/fred,那么方法中的ownerId参数会赋值为fred。必须保证参数名和URI模板变量名一致才能自动赋值,想自定义参数变量需要在@PathVariable注解中加入参数,如下:

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
  // implementation omitted
}

  当然,也可以使用多个@PathVariable来绑定多个URI模板变量,如下:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
  Owner owner = ownerService.findOwner(ownderId);  
  Pet pet = owner.getPet(petId);  
  model.addAttribute("pet", pet);  
  return "displayPet"; 
}

  下面的代码展示使用变量作为相对路径,当请求为/owners/42/pets/21,会调用findPet()方法。

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
  @RequestMapping("/pets/{petId}")
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted
  }
}

  @PathVariable和方法中的参数可以是任何简单数据类型,例如:int,long,Date,等等。spring会自动转换,如果不匹配则抛出TypeMismatchException。

  原文:link

java使用google网址缩短

package com.dorole.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

public class Googl
{
	private static String googUrl = "https://www.googleapis.com/urlshortener/v1/url";

	public static String shorten(String longUrl)
	{
		String shortUrl = "";
		try
		{
			URLConnection conn = new URL(googUrl).openConnection();
			conn.setDoOutput(true);
			conn.setRequestProperty("Content-Type", "application/json");
			OutputStreamWriter osw = new OutputStreamWriter(
					conn.getOutputStream());
			osw.write("{\"longUrl\":\"" + longUrl + "\"}");
			osw.flush();

			BufferedReader br = new BufferedReader(new InputStreamReader(
					conn.getInputStream()));
			String line;
			while ((line = br.readLine()) != null)
			{
				if (line.indexOf("id") > -1)
				{
					shortUrl = line.substring(8, line.length() - 2);
					break;
				}
			}
			osw.close();
			br.close();
		} catch (Exception ex)
		{
			ex.printStackTrace();
		}
		return shortUrl;
	}

	public static void main(String[] args)
	{
		String url = Googl.shorten("http://dorole.com");
		System.out.println(url);
	}
}

需要的地方调用Googl.shorten(), 参考:link, 引自:link

无题

  最近新入了一副耳机,sony xb20ex,接替了使用了两年多的ex51。后者在一次洗衣服的时候忘了拿出来,晒干的时候才发现,结果声音明显变了,声音像是被摁住了纸盆,扁扁的。本来这种半机械化的东西进水也不是什么大事,擦掉附着的杂物应该就没事了,可惜ex51是个全密封的设计,没法拆开,作罢。虽然手头还有个n83的原装耳塞,素质到也不错,但又欠缺对低音的提升,一直很少用。

  挑选了许久,犹豫了许久,最后还是订了个xb20ex,对sony这个牌子印象不错。最开始接触sony的东西还是在中学的时候,同学的一个walkman,原配的就是ex51。在那个时代mp3才刚兴起,ex51的效果给我留下了深刻的印象,入耳式的设计密封性相当好,以至于上课听歌,老师来了都不知道,很厚有力的低音更是最大的亮点。后来线断了,被我拿来后修修补补一用就是近三年,竟在大学第一天晚自习放抽屉里忘了拿,不知被谁捡走了。……,后来在网上又入了个ex51,一直到文章的开头。

  一直以来对重低音都是情有独钟,无论是交响乐中的低音鼓还是古典乐中的低音弦,或是纯粹的舞曲,适当的提升都能带来一种震撼的效果,尤其是在电影中,更加身临其境。可惜玩意并不是每个人都能听到,谁又能知其中妙趣。低音器材向来都是烧钱的。

[音乐]爱的供养 – 何晟铭

《爱的供养》
演唱:何晟铭
把你捧在手上 虔诚地焚香
剪下一段烛光 将经纶点亮
不求荡气回肠 只求爱一场
爱到最后受了伤 哭得好绝望
我用尽一生一世 来将你供养
只期盼你停住 流转的目光
请赐予我无限爱 与被爱的力量
让我能安心在菩提下 静静的观想
把你放在心上 合起了手掌
默默乞求上苍 指引我方向
不求地久天长 只求在身旁
累了醉倒温柔乡 轻轻地梵唱
我用尽一生一世 来将你供养
只期盼你停住 流转的目光
请赐予我无限爱 与被爱的力量
让我能安心在菩提下 静静的观想
我用尽一生一世 来将你供养
人世间有太多的 烦恼要忘
苦海中飘荡着你 那旧时的模样
一回头发现 早已踏出了红尘万丈

}7MLMSE8XEK0QO}[0)V54%P

无奈的眼神,只有“过来”的人始终明白该如何正确选择,或者是对比下的一种成长。

和老四浑厚有力的唱腔放在一起,是否个性更显凄壮。

——《宫锁心玉》二十四集