我记录

RESTfull 数据

掷鸡蛋者 发布于 2015/9/20 21:23 浏览: 700 回复: 0 所在分类:java

有两种方案,一种是使用 RestController;另外一种是将传统的 mvc 转成 json 

准备:在 pom.xml 中增加 jackson 依赖

        <!-- Jackson JSON Processor -->

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-core</artifactId>

            <version>2.4.1</version>

        </dependency>

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.4.1.1</version>

        </dependency>

方案一、创建一个 RestController

非常简单,只要打上 @RestController 的注解即可。@RequestMapping 也和 mvc 一样。

@RestController

public class ArticleRestController {



    @RequestMapping(value = "api/article")

    public List<Article> getArticle(){


        System.out.println("enter rest action");


        ArrayList<Article> list = new ArrayList<Article>();


        Article x = new Article();

        x.setId(1);

        x.setTitle("title1");

        list.add(x);


        Article x2 = new Article();

        x2.setId(2);

        x2.setTitle("中文title2");

        list.add(x2);


        return list;

    }


    @RequestMapping(value="api/article/create", method = RequestMethod.POST)

    public String create(@RequestBody Article article) {


        System.out.println( article.getId());

        System.out.println( article.getTitle());


        return "create done...";

        //return "\"okkkkk\""; // 如果加上双引号,双引号也会返回

        //return "{\"msg\":\"ok\"}"; // 属性也必须加上双引号

    }


}

方案二、将普通 mvc 转成 json

只要增加两个注解,当然,仍然要依赖 jackson 相关三个 jar 包

    @RequestMapping(value = "api/post", produces = "application/json")

    @ResponseBody

    public List<Article> getArticle(){


        System.out.println("enter rest action");


        ArrayList<Article> list = new ArrayList<Article>();


        Article x = new Article();

        x.setId(1);

        x.setTitle("title11");

        list.add(x);


        Article x2 = new Article();

        x2.setId(2);

        x2.setTitle("中文title22");

        list.add(x2);


        return list;

    }


    @RequestMapping(value="api/post/create", method = RequestMethod.POST, produces = "application/json")

    @ResponseBody

    public String create(@RequestBody Article article) {


        System.out.println( article.getId());

        System.out.println( article.getTitle());


        //return "\"okkkkk\""; // 必须双引号

        return "{\"msg\":\"ok\"}"; // 属性也必须加上双引号

    }

【注意:两种 controller 返回字符串的区别】

1)RestController 直接返回字符串;MvcController 返回的字符串必须加上双引号

【直接request获取json字符串】

BufferedReader reader = request.getReader();

下面是示例代码:

public void doPost(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {


  StringBuffer jb = new StringBuffer();

  String line = null;

  try {

    BufferedReader reader = request.getReader();

    while ((line = reader.readLine()) != null)

      jb.append(line);

  } catch (Exception e) { /*report an error*/ }


  try {

    JSONObject jsonObject = JSONObject.fromObject(jb.toString());

  } catch (ParseException e) {

    // crash and burn

    throw new IOException("Error parsing JSON request string");

  }


  // Work with the data using methods like...

  // int someInt = jsonObject.getInt("intParamName");

  // String someString = jsonObject.getString("stringParamName");

  // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName");

  // JSONArray arr = jsonObject.getJSONArray("arrayParamName");

  // etc...

}


掷鸡蛋者2015/9/20 21:23

留下脚印

踩一脚
copyright © 用微博记录这个时代 2010-2014
Powered by 我记录2.0
Processed in 0 seconds, 0 queries