文档章节

spring mvc restful + json 测试代码(二)

youway
 youway
发布于 2014/08/25 16:45
字数 1172
阅读 87
收藏 3

4. Person.java

package com.kakaka.restful.domain;

public class Person {

	private int id;
	private String name;
	private String sex;
	private int age;
	
	....省略setter、getter方法
}

5. PersonController.java

    注意:

package com.kakaka.restful.web.controller;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.gzdfbz.restful.domain.Person;

/**
 * 基于Restful风格架构测试
 * 根据请求方式不同,可做如下约定:
 * /person/{id} HTTP GET    => get()
 * /person/{id} HTTP DELETE => delete()
 * /person       HTTP POST   => add()
  * /person       HTTP PUT   => addOrUpdate() 新增或完整更新(不太好用),就是所有属性不管更新还是不更新,都要列出来。
 * /person      HTTP PATCH  => update() 部分更新 
 *
@Controller
public class PersonController {

	/** logback 日志实例 */
	private final static Logger logger = LoggerFactory
			.getLogger("PersonController.class");

	/**
	 * 获取人员信息
	 * /person/{id} HTTP GET => get()
	 * @return
	 */
	@RequestMapping(value = "/person/{id:\\d+}", method = RequestMethod.GET)
	public @ResponseBody 
	Person getPerson(@PathVariable("id") int id) {
		logger.info("获取人员信息id=" + id);
		Person person = new Person();
		person.setName("张三");
		person.setSex("男");
		person.setAge(30);
		person.setId(id);
		return person;
	}

	/**
	 * 删除人员信息
	 * /person/{id} HTTP DELETE => delete()
	 * @return
	 */
	@RequestMapping(value = "/person/{id:\\d+}", method = RequestMethod.DELETE)
	public @ResponseBody 
	Object delete(@PathVariable("id") int id) {
		logger.info("删除人员信息id=" + id);
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("msg", "删除人员信息成功");
		return jsonObject;
	}

	/**
	 * 添加人员信息
	 * /person HTTP POST =>  add()
	 * @return
	 */
	@RequestMapping(value = "/person", method = RequestMethod.POST)
	public @ResponseBody 
	Object add(Person person) {
		logger.info("添加人员信息成功id=" + person.getId());
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("msg", "添加人员信息成功");
		return jsonObject;
	}

	/**
	 * 更新人员信息
	 * /person/{id} PUT => update()
	 * @return
	 */
	@RequestMapping(value = "/person", method = RequestMethod.PUT)
	public @ResponseBody Object update(Person person) {
		logger.info("更新人员信息id=" + person.getId());
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("msg", "更新人员信息成功");
		return jsonObject;
	}

	/**
	 * 获取人员信息列表
	 * /person HTTP PATCH=>  update()
	 * @return
	 */
	@RequestMapping(value = "/person", method = RequestMethod.PATCH)
	public @ResponseBody List<Person> update(
			@RequestParam(value = "name", required = false, defaultValue = "") String name){

		logger.info("name like " + name);
		List<Person> lstPersons = new ArrayList<Person>();

		Person person = new Person();
		person.setName("张三");
		person.setSex("男");
		person.setAge(25);
		person.setId(101);
		lstPersons.add(person);

		Person person2 = new Person();
		person2.setName("李四");
		person2.setSex("女");
		person2.setAge(23);
		person2.setId(102);
		lstPersons.add(person2);

		Person person3 = new Person();
		person3.setName("王五");
		person3.setSex("男");
		person3.setAge(27);
		person3.setId(103);
		lstPersons.add(person3);

		return lstPersons;
	}

}

6. 页面 rest.jsp

   注意:在http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html 中同时指明:

contentType: "application/x-www-form-urlencoded"

   rest.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>spring mvc restful json test</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="spring,webmvc,restful,json,ajax">
	<meta http-equiv="description" content="spring mvc restful json test">
	<link rel="stylesheet" type="text/css"	href="uikit-2.8.0/css/uikit.gradient.min.css">
	<link rel="stylesheet" type="text/css" href="uikit-2.8.0/css/addons/uikit.gradient.addons.min.css">
</head>
<body>
<div
	style="width:800px;margin-top:10px;margin-left: auto;margin-right: auto;text-align: center;">
	<h2>spring mvc restful json test</h2>
</div>
<div style="width:800px;margin-left: auto;margin-right: auto;">
	<fieldset class="uk-form">
		<legend>表单测试</legend>
		<div class="uk-form-row">
			<input type="text" class="uk-width-1-1">
		</div>
		<div class="uk-form-row">
			<input type="text" class="uk-width-1-1 uk-form-success">
		</div>
		<div class="uk-form-row">
			<input type="text" class="uk-width-1-1 uk-form-danger">
		</div>
		<div class="uk-form-row">
			<input type="text" class="uk-width-1-1">
		</div>
		<div class="uk-form-row">
			<select id="form-s-s">
				<option>---请选择---</option>
				<option>是</option>
				<option>否</option>
			</select>
		</div>
		<div class="uk-form-row">
			<input type="date" id="form-h-id" />
		</div>
	</fieldset>
	<fieldset class="uk-form">
		<legend>基于Restful架构风格的资源请求测试</legend>
		<button class="uk-button uk-button-primary uk-button-large" id="btnGet">获取人员GET</button>
		<button class="uk-button uk-button-primary uk-button-large" id="btnAdd">添加人员POST</button>
		<button class="uk-button uk-button-primary uk-button-large" id="btnUpdate">更新人员PUT</button>
		<button class="uk-button uk-button-danger uk-button-large" id="btnDel">删除人员DELETE</button>
		<button class="uk-button uk-button-primary uk-button-large" id="btnList">查询列表PATCH</button>
	</fieldset>
</div>
 <div align="center">
        <br> <br>=========测试测试测试=======<br> <br>
        <div id="result"></div>
        <br>
        <p>
            by <a href="http://gzdfbz.com">gzdfbz.com</a>
        </p>
    </div>

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="uikit-2.8.0/js/uikit.min.js"></script>
<script type="text/javascript" src="uikit-2.8.0/js/addons/notify.min.js"></script>
<script type="text/javascript">
	(function(window,$){
		var kakaka={
			url:"",
			init:function(){
				kakaka.url="${ctx}";
				$.UIkit.notify("页面初始化完成", {status:"info",timeout:500});
				$("#btnGet").click(kakaka.get);
				$("#btnAdd").click(kakaka.add);
				$("#btnDel").click(kakaka.del);
				$("#btnUpdate").click(kakaka.update);
				$("#btnList").click(kakaka.list);
			},
			get:function(){
				$.ajax({
					url: kakaka.url +person/101/',
					type:"GET",
				        dataType:"json",
					success : function(data) {
		                $('#result').html(data.name + " , " + data.sex+ " , " +data.age);
		            }
				}).done(function(data, status, xhr) {
					$.UIkit.notify(data.msg, {status:"success",timeout:1000});
				}).fail(function(xhr, status, error) {
					$.UIkit.notify("请求失败!", {status:"danger",timeout:2000});
				});
			},
			add:function(){
				$.ajax({
					url: kakaka.url +"person",
					type:"POST",
					dataType:"json",
					data: {id: 1,name:"张三",sex:"男",age:23}
				}).done(function(data, status, xhr) {
					$.UIkit.notify(data.msg, {status:"success",timeout:1000});
				}).fail(function(xhr, status, error) {
					$.UIkit.notify("请求失败!", {status:"danger",timeout:2000});
				});
			},
			del:function(){
				$.ajax({
					url: kakaka.url +"person/109",
					type:"DELETE",
					dataType:"json"
				}).done(function(data, status, xhr) {
					$.UIkit.notify(data.msg, {status:"success",timeout:1000});
				}).fail(function(xhr, status, error) {
					$.UIkit.notify("请求失败!", {status:"danger",timeout:2000});
				});
			},
			update:function(){
				$.ajax({
					url: kakaka.url +"person",
					type:"PUT",//注意在传参数时,加:_method:"PUT" 将对应后台的PUT请求方法
					dataType:"json",
					data:  {id: 221,name:"王五",sex:"男",age:23}
				}).done(function(data, status, xhr) {
					$.UIkit.notify(data.msg, {status:"success",timeout:1000});
				}).fail(function(xhr, status, error) {
					$.UIkit.notify("请求失败!", {status:"danger",timeout:2000});
				});
			},
			list:function(){
				$.ajax({
					url: kakaka.url +"person",
					contentType: "application/x-www-form-urlencoded; charset=utf-8",
					type:"PATCH", 
					dataType:"json",
					data: {_method:"PATCH",name:"王五"}
				}).done(function(data, status, xhr) {
					$.UIkit.notify("查询人员信息成功", {status:"success",timeout:1000});
				}).fail(function(xhr, status, error) {
					$.UIkit.notify("请求失败!", {status:"danger",timeout:2000});
				});
			}
		};
		window.kakaka=(window.kakaka)?window.kakaka:kakaka;
		$(function(){
			kakaka.init();
		});
	})(window,jQuery);
</script>
</body>
</html>


© 著作权归作者所有

youway
粉丝 3
博文 44
码字总数 16832
作品 0
程序员
私信 提问
Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试

原文出处:didispace 首先,回顾并详细说明一下在快速入门中使用的、、注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 :修饰class,用来创建处...

didispace
2018/09/27
0
0
Spring MVC Rest 返回值为空

问题描述: 采用Spring Restful ,可以通过浏览器的地址栏URL正确访问后台且不报错误,但是前台总是获取不到数据,前台也是收到了后台的响应,就是没有数据。 具体如下: 采用 Spring Restf...

learn_more
2015/03/16
1K
0
Spring MVC 与主流架构 RESTful 的集成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/GitChat/article/details/97791177 前言 这一讲来学习 Spring MVC 对...

GitChat技术杂谈
07/30
0
0
使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

Spring,构建 Java™ 平台和 Enterprise Edition (Java EE) 应用程序的著名框架,现在在其模型-视图-控制器(Model-View-Controller ,MVC)层支持具象状态传输 (REST)。RESTful web 服务根据...

IBMdW
2011/08/05
5.3K
2
SpringCloud SpringBoot 分布式微服务云架构 构建RESTful API

首先,回顾并详细说明一下在快速入门中使用的、、注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 :修饰class,用来创建处理http请求的对象 :...

itcloud
2018/07/09
25
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 定时脚本

1.定时任务基本用法 linux设置定时任务的关键字是:crontab查看当前定时任务:crontab -l新建定时任务的命令是:crontab -e 打开类似vi编辑器向里面新增内容即可 2.参数说明 时间的格...

半张一块
18分钟前
2
0
免费好用的常用软件

UninstallTool 比控制面板的卸载好用的多很小 Everything硬盘搜索快 QuickLook快速查看预览文件不用打开 7Z 、Bandizip比winrar没广告 gogs,gitlab 自架git 服务器 VisualSVN Server,svn服...

momo1987
19分钟前
2
0
@Transactional事务几点注意及其属性Propagation的使用

@Transactional事务几点注意 这里面有几点需要大家留意: A. 一个功能是否要事务,必须纳入设计、编码考虑。不能仅仅完成了基本功能就ok。 B. 如果加了事务,必须做好开发环境测试(测试环境...

小海bug
22分钟前
2
0
10套精美可视化数据分析PPT图表,职场必备

在日常工作当中制作PPT的时,一些麻烦的数据什么的,我们常会用到图表展示,但是图表制作过程中难免会遇到一些问题,可能表达不清楚,或者可能有做得不好看的情况出现等等!其实如果有一些好...

TeFuiro
27分钟前
3
0
拐点已至,云原生引领数字化转型升级

作者 | 易立 阿里云资深技术专家 本文整理自易立在 2019 携程技术峰会上发表的题目为《拐点已至,云原生引领数字化转型升级》的演讲。 关注“阿里巴巴云原生”公众号,回复关键词“转型”即可...

阿里巴巴云原生
29分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部