AndServer 简单使用

AndServerAndroid 平台的 Web ServerWeb Framework。 它基于编译时注解提供了类似 SpringMVC 的注解和功能,如果您熟悉 SpringMVC,则可以非常快速地掌握它。

  • 源码地址:https://github.com/yanzhenjie/AndServer/
  • 文档地址:https://yanzhenjie.github.io/AndServer/
  • 旧版文档:https://yanzhenjie.github.io/AndServer/1.x/

引用

  1. project build.gradle
buildscript {
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.yanzhenjie.andserver:plugin:2.1.10'
        ...
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}
  1. module build.gradle
plugins {
    id 'com.android.application'
    id 'com.yanzhenjie.andserver'
}
...

dependencies {
    implementation 'com.yanzhenjie.andserver:api:2.1.10'
    annotationProcessor 'com.yanzhenjie.andserver:processor:2.1.10'
    ...
}

部署

AndServer 提供启动、停止、网络地址与端口监听、连接超时配置、SSL、状态监听、Socket 的一些优化配置等

Server mServer= AndServer.webServer(context)
    .port(8080)
    .timeout(10, TimeUnit.SECONDS)
    .build();

/**
 * Start server.
 */
public void startServer() {
    if (mServer.isRunning()) {
        // TODO The server is already up.
    } else {
        // startup the server.
        mServer.startup();
    }
}
/**
 * Stop server.
 */
public void stopServer() {
    if (mServer.isRunning()) {
         // shutdown the server.
        mServer.shutdown();
    } else {
        Log.w("AndServer", "The server has not started yet.");
    }
}

使用

  1. 返回String
@RestController
public class UserController {
    @GetMapping("/user/info")
    String getAccount(@RequestParam("account") String account,HttpRequest request,HttpResponse response) {
        if("123".equals(account)) {
            response.setStatus(200);
            return "123 Login";
        } else {
            response.setStatus(400);
            return "Login failed.";
        }
    }
    @PostMapping("/user/login")
    String login(@RequestParam("account") String account,
        @RequestParam("password") String password) {
        if("123".equals(account) && "123".equals(password)) {
            return "Login successful.";
        } else {
            return "Login failed.";
        }
    }
}
  1. 返回Json
@RestController
public class UserController {

    /**
     * Get user information.
     */
    @GetMapping("/user/info")
    String userList(@RequestParam("id") String id) {
        User user = new User();
        user.setId(id);
        user.setName("AndServer");
        return JSON.toJSONString(user);
    }

    /**
     * Get user list.
     */
    @GetMapping("/user/get")
    JSONObject userList() {
        JSONObject jsonObj = ...;
        return jsonObj;
    }
}
  1. MultipartFile
    // 单个文件
    @PostMapping(path = "/upload")
    void upload(@RequestParam(name = "file") MultipartFile file) throws IOException {
        String fileName = file.getName();
        log( "/upload", fileName);
    }

    //多个文件
    @PostMapping(path = "/file/uploadMore")
    String uploadMoreFile(HttpRequest request,HttpResponse response) throws IOException {
        StandardMultipartRequest standardMultipartRequest = (StandardMultipartRequest)request;
        Map files = standardMultipartRequest.getFileMap();

        Map saveFile = writeFile(files);

        return "OK";
    }

    //保存转移文件
    private Map writeFile(Map fileMap){
        Map saveFileInfo = new HashMap<>();
        for (String s: fileMap.keySet()) {
            MultipartFile f = fileMap.get(s);
            log("/writeFile", s +", "+ f.getFilename());

            try {
                f.transferTo(new File(Cons.getPath(f.getFilename())));
                saveFileInfo.put(s, f.getFilename());
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return saveFileInfo;
    }

疑问点是,按照文件,在 Config 中配置了 文件保存目录,但是
.uploadTempDir(new File(context.getCacheDir(), "_server_upload_cache_")) // 文件保存目录 配置的保存路径下,没有保存收到的文件,所以只能使用transferTo(File),转移该文件到目标位置 来转移文件了

文档这样写,还蛮疑惑的


image.png
@Config
public class AppConfig implements WebConfig {

    @Override
    public void onConfig(Context context, Delegate delegate) {
        // 增加一个静态网站
        delegate.addWebsite(new AssetsWebsite(context, "/web"));

        // 自定义配置表单请求和文件上传的条件
        delegate.setMultipart(Multipart.newBuilder()
            .allFileMaxSize(1024 * 1024 * 20) // 单个请求上传文件总大小
            .fileMaxSize(1024 * 1024 * 5) // 单个文件的最大大小
            .maxInMemorySize(1024 * 10) // 保存上传文件时buffer大小
            .uploadTempDir(new File(context.getCacheDir(), "_server_upload_cache_")) // 文件保存目录
            .build());
    }
}

你可能感兴趣的:(AndServer 简单使用)