Android開發如何搭建超簡易調試後臺

做爲一個Android開發,常常碰到項目週期緊張,然後臺來不及寫接口的狀況。爲了節約時間,本人特地向咱們公司的後臺工程師請教了一下如何搭建一個簡易的本地接口調試環境(SpringBoot)。廢話很少說,掏出神器!java

新建項目

File -> New -> Project...
選擇左側Spring Initializr,選擇jdk版本,點擊Next 數組


填寫 包名等相關信息,而後 Next

選擇 Spring Web,繼續 Next

填寫工程 Name路徑,最後點擊 Finish

項目結構

總體的項目結構很相似AndroidStudio的項目目錄,DemoApplication便是整個Web應用的入口,application.properties中能夠配置應用的相關屬性設置緩存


這裏看一下 DemoApplication中的方法

新建接口

咱們最終須要實現的接口地址參考以下(端口號默認爲8080):
http://localhost:8080/test/printMap
若須要指定端口號,則配置以下: app

localhost
本機地址,在本機上利用 Chrome或者 Postman等工具調試是直接使用 localhost便可,在 app中進行調試則須要指定該 localhost(能夠在 cmdipconfig確認本機 IP)

建立test路徑

com.example.demo 包下新建一 個HelloWorld 類(存放接口方法)以及一個bean目錄(存放接收的數據)
maven

HelloWorld.java中標註路徑
ide

建立目標接口

  1. 接收單個參數
    接口地址:http://localhost:8080/test/printString
    HelloWorld.java內建立接口方法:

測試: 工具

  1. 接收多個參數
    接口地址:http://localhost:8080/test/printMap
    bean目錄下新建MultiParamTest.java來接收參數


HelloWorld.java內建立接口方法:

注:這裏將multiParamTest對象轉爲Json對象用的是FastJson,添加方法以下(maven測試


測試:

  1. 上傳單個文件
    接口地址:http://192.168.1.172:8080/test/uploadFile
    bean目錄下新建UploadFile.java用於存放文件接收結果


HelloWorld.java內建立接口方法:

private File file = new File("d:"+File.separator+"files");
    /** * 上傳文件 * * @param multipartFile 文件 * @return bean of UploadFile instance */
    @RequestMapping("uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile multipartFile) {
        if (multipartFile.isEmpty()) {//若接收的文件爲空,則返回false
            return JSON.toJSONString(new UploadFile(false, "accept none"));
        }
        if (!file.exists()) {//若用來存放文件的本地文件路徑不存在則建立路徑中的全部文件夾
            file.mkdirs();
        }
        BufferedOutputStream outputStream = null;//緩存輸出流
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(new File(file.getAbsolutePath() + "/" + multipartFile.getOriginalFilename()));
            outputStream = new BufferedOutputStream(fileOutputStream);
            outputStream.write(multipartFile.getBytes());
            outputStream.flush();
            return JSON.toJSONString(new UploadFile(true, "success"));//返回結果true,文件保存成功
        } catch (IOException e) {
            return JSON.toJSONString(new UploadFile(false, "error:" + e.getMessage()));//保存文件失敗,返回結果false,返回失敗緣由
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.close();//關閉輸出流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
複製代碼

測試:ui

  1. 上傳多個文件及參數
    接口地址:http://192.168.1.172:8080/test/uploadFiles
    HelloWorld.java內建立接口方法:
/** * 接收多個文件及參數 * @param multipartFiles 文件數組 * @param multiParamTest 其餘參數 * @return 上傳結果 */
    @RequestMapping("uploadFiles")
    public String uploadFiles(@RequestParam("files") MultipartFile[] multipartFiles, MultiParamTest multiParamTest) {
        System.out.println("接收多個文件,param=" + JSON.toJSONString(multiParamTest));
        if (multipartFiles.length == 0) {
            return JSON.toJSONString(new UploadFile(false, "Detect No Files"));
        }
        if (!file.exists()) {
            file.mkdirs();
        }
        String result = null;
        for (MultipartFile multipartFile : multipartFiles) {
            if (multipartFile == null) {
                result = JSON.toJSONString(new UploadFile(false, "accept none"));
                continue;
            }
            BufferedOutputStream outputStream = null;
            try {
                FileOutputStream fileOutputStream = new FileOutputStream(new File(file.getAbsolutePath() + "/" + multipartFile.getOriginalFilename()));
                outputStream = new BufferedOutputStream(fileOutputStream);
                outputStream.write(multipartFile.getBytes());
                outputStream.flush();
                result = JSON.toJSONString(new UploadFile(true, "success"));
            } catch (IOException e) {
                result = JSON.toJSONString(new UploadFile(false, "error:" + e.getMessage()));
                break;
            } finally {
                try {
                    if (outputStream != null) {
                        outputStream.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
複製代碼

配置接收文件大小限制(-1爲不限制大小,或者eg:50MB):spa

測試:

app上測試

新建一個JavaWebDemo工程用來測試(RxJava+Retrofit):

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("http://192.168.1.172:8080/test/")
                .build();

        Map<String, String> param = new HashMap<>();
        param.put("str1", "123");
        param.put("str2", "w234");

        String filePath1 = "storage"+File.separator+"emulated/0/bluetooth/xx.apk";
        String filePath2="storage/emulated/0/DingTalk/xx_1.apk";
        Observable<BeanUpLoadFile> upLoadFileObservable = retrofit.create(Api.class)
                .uploadFile(createReportParam("files", filePath1,filePath2),param);
        upLoadFileObservable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<BeanUpLoadFile>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(BeanUpLoadFile beanUpLoadFile) {
                        Log.i(MainActivity.class.getSimpleName(), beanUpLoadFile.toString());
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(MainActivity.class.getSimpleName(),e.toString());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    /** * 生成上傳文件的參數 */
    public MultipartBody.Part[] createReportParam(String paramName, String... filePath) {
        MultipartBody.Part[] parts = new MultipartBody.Part[filePath.length];
        for (int i=0;i<filePath.length; i++) {
            File uploadFile = new File(filePath[i]);
            RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data;charset=UTF-8"), uploadFile);
            parts[i]=MultipartBody.Part.createFormData(paramName, uploadFile.getName(), requestBody);
        }

        return parts;
    }
}
複製代碼

app打印接收接口結果日誌:


接口後臺接收到的數據:
相關文章
相關標籤/搜索