当前位置:   article > 正文

SpringBoot之请求响应的json数据结构_springboot中json报文结构

springboot中json报文结构


写在前面: 最近在用SpringBoot搭建一个Blog,由于完全是自己设计并实现的,踩了好多坑。再加上SpringBoot我其实只看了一天,所以处在了一种边百度边写接口的窘境。

请求

  1. 当前端只get请求一个参数时

    1.1 这个参数既可以是实体类,也可以是基本类型,可以不加注解,如下:
    http:127.0.0.1:8080/byTime?page=1&size=1
    注:page和size为类MyPages的两个属性值

    @GetMapping("/byTime")
    public PageInfo<ArticleInfo> listArticleInfoByTime(MyPages myPages){
        return new PageInfo<>(articleService.listArticleInfoByTime(myPages));
    }
    
    • 1
    • 2
    • 3
    • 4

    1.2 如果这个参数是基本类型的话,也可以:
    http:127.0.0.1:8080/1

    @GetMapping("{id}")
    public PageInfo<ArticleInfo> listArticleInfoByTime(@PathVariale int id){
        return new PageInfo<>(articleService.listArticleInfoByTime(id));
    }
    
    • 1
    • 2
    • 3
    • 4

    注:@PathVariale 该注解用来解析一个占位符,即把{id}中的值替换为参数值

    也可以加上另外一个注解@RequestParam,用来锁定修改形参值:
    http:127.0.0.1:8080/byTime?id=1

    @GetMapping("/byTime")
    public PageInfo<ArticleInfo> listArticleInfoByTime(@RequestParam("id") int uid){
        return new PageInfo<>(articleService.listArticleInfoByTime(uid));
    }
    
    • 1
    • 2
    • 3
    • 4
  2. 当前端get请求多个参数时

    2.1 当前端请求一个基本类加实体类
    http:127.0.0.1:8080/cat?page=1&size=1

    @GetMapping("/{categoryName}")
    public List<ArticleInfo> listArticleInfoByCategory(@PathVariable String categoryName, MyPages pages){
        return articleService.listArticleInfoByCategory(categoryName, pages);
    }
    
    • 1
    • 2
    • 3
    • 4
  3. 当前端post一个json时,只需要用@RequestBody这个注解即可

        @PostMapping("/update")
    public boolean updateCategoryInfo(@RequestBody CategoryInfo categoryInfo){
        return categoryInfoService.updateCategoryInfo(categoryInfo);
    }
    
    • 1
    • 2
    • 3
    • 4
  4. 当前端post一个json和一个文件的时候,可以这样

    @PostMapping("/upload")
    public boolean updateCategoryInfo(@RequestBody CategoryInfo categoryInfo,@RequestParam("file") uploadFile)){
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
  5. 当前端post两个不同的实体类封装为json的时候,可以把它封装为一个Map< Object>
    前端的json格式为:

	    {
       "articleInfo": {
        "title":"第wu次",
        "summary":"第wu次"
    },
    "articleContent":{
    	"content":"第wu次"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
	    @PostMapping("/post")
    public boolean postArticle(@RequestBody Map<String, Object> map) throws IOException {

        ObjectMapper objectMapper = new ObjectMapper();
        String jsonInfo = objectMapper.writeValueAsString(map.get("articleInfo"));
        String jsonContent = objectMapper.writeValueAsString(map.get("articleContent"));
        ArticleInfo articleInfo = objectMapper.readValue(jsonInfo,ArticleInfo.class);
        ArticleContent articleContent = objectMapper.readValue(jsonContent,ArticleContent.class);

        return articleService.insertArticle(articleInfo,articleContent);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

响应

  • 大多数情况下,后端给前端返回的都是Json,此时需要加上一个@RestController(注:其实本质还是加的ResponseBody),这个注解的一个功能是把实体类,集合,基本数据类型转为Json格式,如下(ResponseBody即可以注解到类上,也可以注解到方法上):
@RestController
@RequestMapping("/article")
public class ArticleInfoController {

    private final ArticleService articleService;

    @Autowired
    public ArticleInfoController(ArticleService articleService) {
        this.articleService = articleService;
    }
   @GetMapping("/byTra")
    public List<ArticleInfo> listArticleInfoByTra(){
        return articleService.listArticleInfoByTra();
    }
    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

当返回多个实体类的时候,可以通过List< Object>来封装

    @GetMapping("/content")
    public List<Object> getArticleContent(long id){
        List<Object> list = new ArrayList<>();
        list.add(articleService.getArticleContentById(id));
        list.add(articleService.listCommentOfArticle(id));
        return list;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/619832
推荐阅读
相关标签
  

闽ICP备14008679号