springmvc搭建返回json格式的restful api
阿新 • • 發佈:2018-12-30
目標:實現如下的restful api,返回格式為json
/blog/100 HTTP GET => 得到id = 100的blog
/blog/100 HTTP DELETE => 刪除 id = 100的blog
/blog/100 HTTP PUT => 更新id = 100的blog
/blog HTTP POST => 新增blog
用到的jar包:
主要程式碼:
web應用配置檔案
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
springmvc配置檔案,注意配置stringConverter和jsonConverter
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="stringConverter" /> <ref bean="jsonConverter" /> </list> </property> </bean> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/" /> <property name="suffix" value=".jsp" /> </bean> <context:component-scan base-package="com.ihefe.controller" /> </beans>
記錄日誌,使用log4j
log4j.properties
### set log levels ### log4j.rootLogger = info , Console , D #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=INFO log4j.logger.java.sql.Statement=INFO log4j.logger.java.sql.PreparedStatement=INFO #output2file log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D:/logs/log-restful.log log4j.appender.D.Append = true log4j.appender.D.Threshold = INFO ## è¾åºinfo级å«ä»¥ä¸çæ¥å¿ log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
控制器,定義請求引數,方法,返回格式json
BlogController.java
package com.ihefe.controller;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
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.ResponseBody;
import com.ihefe.model.Blog;
@Controller
public class BlogController {
/** 日誌例項 */
private static final Logger logger = Logger.getLogger(BlogController.class);
@RequestMapping(value = "/index", produces = "text/plain;charset=UTF-8")
public @ResponseBody String hello() {
return "hello";
}
@RequestMapping(value = "/say/{msg}", produces = "application/json;charset=UTF-8")
public @ResponseBody String say(@PathVariable(value = "msg") String msg) {
return "{\"msg\":\"you say:'" + msg + "'\"}";
}
@RequestMapping(value = "/blog/{id:\\d+}", method = RequestMethod.GET)
public @ResponseBody Blog getBlog(@PathVariable("id") int id) {
logger.info("獲取部落格id=" + id);
Blog blog = new Blog();
blog.setTitle("部落格標題");
blog.setBrief("部落格概要");
blog.setContent("部落格內容");
blog.setId(id);
return blog;
}
@RequestMapping(value = "/blog/{id:\\d+}", method = RequestMethod.DELETE)
public @ResponseBody Object deleteBlog(@PathVariable("id") int id) {
logger.info("刪除部落格資訊id=" + id);
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "刪除部落格成功");
return jsonObject;
}
@RequestMapping(value = "/blog", method = RequestMethod.POST)
public @ResponseBody Object addBlog(Blog blog) {
logger.info("新增部落格成功id=" + blog.getId());
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "新增部落格成功");
return jsonObject;
}
@RequestMapping(value = "/blog/{id:\\d+}", method = RequestMethod.PUT)
public @ResponseBody Object updateBlog(Blog blog) {
logger.info("更新部落格id=" + blog.getId());
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "更新部落格成功");
return jsonObject;
}
}
部落格實體類
Blog.java
package com.ihefe.model;
public class Blog {
private int id;
private String title;
private String brief;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBrief() {
return brief;
}
public void setBrief(String brief) {
this.brief = brief;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Blog [id=" + id + ", title=" + title + ", brief=" + brief
+ ", content=" + content + "]";
}
public Blog() {
super();
// TODO Auto-generated constructor stub
}
}
測試,使用火狐httprequester工具: