Angularjs cors 用get、post方法与springmvc后传递json数据的配置

前端之家收集整理的这篇文章主要介绍了Angularjs cors 用get、post方法与springmvc后传递json数据的配置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先介绍跨域问题,基于安全的考虑,页面只有在同一个域名下,交流数据,比如网易就不能申请百度的服务(抓取网页那是另外的技术),ajax也是这个使用范围,跨域就失效了。

在移动开发中,手机本身就是web站点后台pc服务器是另外一个web站点。这样就存在跨域问题。
早先用jsonp方法,或者在srpingmvc中设置拦截器来解决跨域传递json格式数据,但这些都过时了。
下面是最新的。注意只有spring4.3以上(包含4.3)才有效。

1.后台增加3个json的jar包,如下:
jackson-databind@H_404_18@
jackson-core@H_404_18@
@H_404_18@
jackson-annotations@H_404_18@
@H_404_18@@H_404_18@
附上maven配置,一看就懂了
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.5</version>
</dependency>

2.后台设置,springmvc,中只要在类上设置一个注解@CrossOrigin,那么这个类就可以接受跨域申请。注意只有spring4.3以上(包含4.3)才支持注解@CrossOrigin,这点很多文章没提到。 @CrossOrigin 的具体只接受某个域名的配置自己去网上查帮助。默认是允许所有域名访问。@H_404_18@
具体的代码如下,

@CrossOrigin( maxAge = 3600)//配置这里就行了
@Controller
@RequestMapping("/personController")
public class PersonController {
//篇幅有限内容掏空了,最后由完成代码
}

3. 在返回json数据的方法上加注解:@ResponseBody (一般用于后台发达前端的 json数据)

@RequestMapping(value="getjsonp/{id}",method=RequestMethod.GET)
@ResponseBody
public Collection getjson(@PathVariable("id") Integer id,String callback) throws Exception{
}

4.在获取json数据的参数上加注解:@RequestBody (一般有用前端传递到后台的json数据)
@RequestMapping(value="postjson",method=RequestMethod.POST)
public String postjson(@RequestBody Person p) throws Exception{
}

附上后台接受方法,请注意后台方法直接反java类型就ok,系统会自动转成json格式


剩下的就是客户代码:下面演示了post和get方法,其中get部分去掉注释就可以了。我这里是为方便测试。
<@H_404_18@ script@H_404_18@ type=@H_404_18@ "text/javascript"@H_404_18@ >@H_404_18@
@H_404_18@ var@H_404_18@ app@H_404_18@ =angular.module(@H_404_18@ "myApp"@H_404_18@ ,[]);@H_404_18@
@H_404_18@ app@H_404_18@ .controller(@H_404_18@ 'firstController'@H_404_18@ ,@H_404_18@ function@H_404_18@ ($scope,$http) {@H_404_18@
@H_404_18@ //$scope.xx="xyz";@H_404_18@

// $http.get('http://localhost:8080/SSM1/personController/getjsonp/100').success(function (data,status,headers,config){@H_404_18@
// console.log(data);@H_404_18@
// console.log(status);@H_404_18@
// console.log(headers);@H_404_18@
// console.log(config);@H_404_18@
// }@H_404_18@
//@H_404_18@
// ).error(function (data,config) {@H_404_18@
// })@H_404_18@


@H_404_18@ $http({@H_404_18@
@H_404_18@ url@H_404_18@ :@H_404_18@ 'http://localhost:8080/SSM1/personController/postjsonp'@H_404_18@ ,@H_404_18@
@H_404_18@ method@H_404_18@ :@H_404_18@ 'POST'@H_404_18@ ,122)">data@H_404_18@ : {@H_404_18@ id@H_404_18@ :@H_404_18@ 1@H_404_18@ ,@H_404_18@ name@H_404_18@ :@H_404_18@ '@H_404_18@ 美国@H_404_18@ '@H_404_18@ ,122)">age@H_404_18@ :@H_404_18@ 16@H_404_18@ }@H_404_18@
}).success(@H_404_18@ function@H_404_18@ (){@H_404_18@
@H_404_18@ console@H_404_18@ .@H_404_18@ log@H_404_18@ (@H_404_18@ "success!"@H_404_18@ );@H_404_18@
}).@H_404_18@ error@H_404_18@ (@H_404_18@ "error"@H_404_18@ );@H_404_18@
})@H_404_18@


});@H_404_18@
@H_404_18@

@H_404_18@ </@H_404_18@ script@H_404_18@ >@H_404_18@

最后附上后台完整方法:@H_404_18@
@CrossOrigin( maxAge = 3600)
@Controller
@RequestMapping("/personController")
public class PersonController {
//获取前端发出的get请求,前端代码要打开注解
@RequestMapping(value="getjson/{id}",String callback) throws Exception{

Person p1= new Person(1,"aa",30);
Person p2= new Person(2,"bbb",50);
HashMap ps = new HashMap<Integer,Person>();
ps.put(1,p1);
ps.put(2,p2);
System.out.println(id.toString());
System.out.println(callback);
System.out.println("new Person p");
return ps.values();
}


//获取前端发出的post请求
@RequestMapping(value="postjson",method=RequestMethod.POST)
public String postjson(@RequestBody Person p) throws Exception{
System.out.println("id:"+p.getId());
System.out.println("name:"+p.getName());
System.out.println("age:"+p.getAge());
return "ok";
}

}

猜你在找的SpringMVC相关文章