Java調用Http接口(1)--編寫服務端

  Http接口輸入的數據通常是鍵值對或json數據,返回的通常是json數據。本系列文章主要介紹Java調用Http接口的各類方法,本文主要介紹服務端的編寫,方便後續文章裏的客戶端的調用。文中所使用到的軟件版本:Java 1.8.0_19一、Spring 5.1.9。java

一、服務端Controller

package com.inspur.demo.web.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
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 org.springframework.web.multipart.MultipartFile;

import com.inspur.common.entity.CallResult;
import com.inspur.common.util.FileUtil;
import com.inspur.demo.entity.User;

@Controller
@RequestMapping(value="/demo/test/", method = {RequestMethod.GET, RequestMethod.POST})
public class TestController {
    private static Logger logger = LoggerFactory.getLogger(TestController.class);
    
    @RequestMapping("getUser")
    @ResponseBody
    public CallResult<User> getUser(String userId, String userName) {
        User user = new User();
        user.setUserId(userId);
        user.setUserName(userName);
        CallResult<User> result = new CallResult<User>(0, "OK", user);
        return result;
    }
    
    /**
     * 傳入json
     * @param user
     * @return
     */
    @RequestMapping("addUser")
    @ResponseBody
    public CallResult<String> addUser(@RequestBody User user) {
        logger.info(user.toString());
        CallResult<String> result = new CallResult<String>(0, "OK", "用戶增長成功");
        return result;
    }
    
    /**
     * 上傳文件及參數
     * @param file
     * @param type
     * @return
     */
    @RequestMapping("multi")
    @ResponseBody
    public CallResult<String> multi(@RequestParam("file") MultipartFile file, String param1, String param2) {
        logger.info("file={},param1={},param2={}", file.getOriginalFilename(), param1, param2);
        InputStream in = null;
        OutputStream out = null;
        CallResult<String> result = new CallResult<String>(0, "OK", "上傳成功");
        try {
            in = new BufferedInputStream(file.getInputStream(), 16 * 1024);
            String originalFilename = file.getOriginalFilename();
            //ie上傳文件該值是全路徑,處理下
            if (originalFilename.indexOf("\\") > -1) {
                originalFilename = originalFilename.substring(originalFilename.indexOf("\\") + 1);
            }
            String fileName = "d:/temp/multi_" + System.currentTimeMillis() + "_" + originalFilename;
            out = new BufferedOutputStream(new FileOutputStream(fileName), 16 * 1024);
            byte[] buffer = new byte[16 * 1024];
            int len = 0;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
        } catch (Exception e) {
            result = new CallResult<String>(-1, "發生異常", "");
            e.printStackTrace();
        } finally {
            FileUtil.close(in);
            FileUtil.close(out);
        }
        return result;
    }
}

二、其餘輔助類

2.一、CallResult類

package com.inspur.common.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 
 * @param <T>
 */
public class CallResult<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    
    /**
     * 返回碼
     * 0 正常,其餘異常
     */
    private int returnCode = 0;
    
    /**
     * 描述
     */
    private String description = "OK";
    
    /**
     * 結果數據
     */
    private T result;
    
    public CallResult(){}
    
    public CallResult(int returnCode, String description) {
        this.returnCode = returnCode;
        this.description = description;
    }
    
    public CallResult(int returnCode, String description, T result) {
        this.returnCode = returnCode;
        this.description = description;
        this.result = result;
    }
    
    public int getReturnCode() {
        return returnCode;
    }
    public void setReturnCode(int returnCode) {
        this.returnCode = returnCode;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public T getResult() {
        return result;
    }
    public void setResult(T result) {
        this.result = result;
    }
    

    @Override
    public String toString() {
        //return JSON.toJSONString(this, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty);
        try {
            return new ObjectMapper().writeValueAsString(this);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return "";
    }
    
}
View Code

2.二、User類

package com.inspur.demo.entity;

public class User {
    private String userId;
    private String userName;
    
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    @Override
    public String toString() {
        return "User [userId=" + userId + ", userName=" + userName + "]";
    }
}
View Code

2.二、FileUtil類

package com.inspur.common.util;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


/**
 * 文件操做工具
 * 
 */
public class FileUtil {
    private FileUtil() {}
    
    public static void close(InputStream in) {
        try {
            if (in != null) {
                in.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close(OutputStream out) {
        try {
            if (out != null) {
                out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}
View Code

三、接口地址

在本地部署後,訪問地址爲:web

http://localhost:8080/webframe/demo/test/getUserspring

http://localhost:8080/webframe/demo/test/addUserjson

http://localhost:8080/webframe/demo/test/multiapp

相關文章
相關標籤/搜索