javaWeb(2)
(1)RequestParam
@RequestParam注解主要有哪些参数:
value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties[‘java.vm.version’]}”。
作用:在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter(“name”),另外一种是用注解@RequestParam直接获取。
@RequestMapping("testRequestParam")
public String funtion(@RequestParam String inputStr, HttpServletRequest request) {
System.out.println(inputStr);
int inputInt = Integer.valueOf(request.getParameter("inputInt"));
System.out.println(inputInt);
// ......省略
return "index";
}
需要特别注意的是:如果用@RequestParam注解的参数是int基本类型,但是required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int,这个不可以
solution: “Consider declaring it as object wrapper for the corresponding primitive type.”建议使用包装类型代替基本类型,如使用“Integer”代替“int”
(2)mvc:annotation-driven
会自动注册
RequestMappingHandlerAdapter
RequestMappingHandlerMapping
与ExceptionHandlerExceptionResolver三个bean
还将
–支持使用ConversionService实例对表单参数进行类型转换
–支持使用@NumberFormat,@DateTimeFormat注解完成数据类型的格式化
—支持使用@RequestBody和@ResponseBody注解
(3)数据绑定**
先占个坑
(4)处理JSON
大致步骤:
1.加入jar包;
2.编写目标方法,
3.在方法上添加@ResponseBody注解
@ResponseBody
@RequestMapping("/getUsers")
public List<User> testAjax(){
List<User> ls=new ArrayList();
ls.add(new User("pawn",21));
ls.add(new User("xing",20));
return ls;
}
(5)@RequestBody和@ResponseBody
@RequestBody使用
作用:
注解用于将Controller的方法参数,根据HTTP Request Header的content-Type的内容,通过适当的HttpMessageConverter转换为JAVA类
使用时机:
POST或者PUT的数据是JSON格式或者XML格式,而不是普通的键值对形式.
@RequestMapping(value = "/testRequestBody", method= RequestMethod.POST)
@ResponseBody
public Person testRequestBody(@RequestBody Person p) {
System.out.println("creating a employee:" + p);
return p;
}
Ajax代码如下:
$.ajax({
url: "testRequestBody",
data: '{"name":"小红","age":12}', //要用双引号!!
contentType: "application/json;charset=utf-8", // 因为上面是JSON数据
type: "POST",
headers: {
// Accept: "application/xml",
Accept: "application/json",
},
success: function(data, textStatus){
console.log(data);
alert(data);
},
error: function (data, textStatus, errorThrown) {
console.log(data);
},
});
@ResponseBody用法
作用:
- 该注解用于将Controller的方法返回的对象,根据HTTP Request Header的
Accept
的内容,通过适当的HttpMessageConverter
转换为指定格式后,写入到Response对象的body数据区。
(6)@Autowired
Spring会自动将我们标记为@Autowired的元素装配好
//==================================Controller
@Controller
public class SimpleController {
@Autowired
private SimpleService simpleService;
}
//==================================Service
@Service("simpleService")
public class SimpleServiceImpl implements SimpleService {
@Autowired
private SimpleDao simpleDao;
}
//===================================Repository
@Repository("simpleDao")
public class SimpleDaoImpl implements SimpleDao {
}
@Autowired注解
@Autowired默认是按类型装配对象的,默认情况下它要求依赖对象必须存在
如果允许null值,可以设置它的required属性为FALSE,如@Autowired(required=false)
若想要按名称装配,可以结合@Qualifier注解一起使用,如@Autowired(required=false) @Qualifier(“personDaoBean”)