RequestBody

本文主要介绍RequestBody注解的使用方法,开发者不可将RequestBody注解和RequestBody注解混淆。

客户端可以把一段JSON或者一个文件整体写到请求的Body中发送服务端,服务端的处理方法有两种,第一种是拿到RequestBody对象,由开发者自行转换为目标对象,第二种是使用RequestBody注解结合MessageConverter自动转换为目标对象。

第一种方式

@RestController
public class UserController {

    @PostMapping(path = "/pushUser")
    String push(RequestBody body) throws IOException {
        String content = body.string();
        User user = JSONUtils.parseObject(content, User.class);
        ...
    }
}

第二种方式

@RestController
public class UserController {

    @PostMapping(path = "/pushUser")
    String push(@RequestBody User user) {
        ...
    }
}

可以直观的看出,第二种方式比第一种省去了两行代码和一个异常抛出。

如果开发者实现的MessageConverter支持转化文件,那么我们还可以将Body转化为文件:

@RestController
public class FileController {

    @PostMapping(path = "/pushFile")
    String upload(@RequestBody File file) {
        ...
    }
}

RequestBody注解的参数默认是必须的,如果此参数为空,则会抛出BodyMissingException异常,异常处理请参考ExceptionResolver

如果开发者想让RequestBody为非必填参数:

@RestController
public class FileController {

    @PostMapping(path = "/pushFile")
    String upload(@QueryParam("id") String id, 
        @RequestBody(required = false) File file) {
        ...
    }
}

results matching ""

    No results matching ""