java - Spring : Why should I still use @RequestBody when my class is already annotated with @RestController?

标签 java spring rest

我目前正在为我的 Web 服务应用程序使用 Java 和 Spring。我正在使用 @RestController 注释,希望消除使用 @ResponseBody@RequestBody 注释的需要。不幸的是,删除 @RequestBody 注释会使序列化失败。

这是我的代码,它没有将请求主体映射到我的方法参数,但没有:

@RestController
@RequestMapping(value = "/member", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class MemberController {
    @Autowired
    private MemberService memberService;

    @RequestMapping("/create")
    public void create(Member member) {
        memberService.create(member);
    }

    @RequestMapping("/read")
    public Member read(Member member) {
        return memberService.read(member);
    }

    @RequestMapping("/update")
    public void update(Member member) {
        memberService.update(member);
    }

    @RequestMapping("/delete")
    public void delete(Member member) {
        memberService.delete(member);
    }

    @RequestMapping("/retrieveById")
    public Member retrieveById(Member member) {
        return memberService.retrieveById(member);
    }

    @RequestMapping("/retrieveAll")
    public List<Member> retrieveAll(Member member) {
        return memberService.retrieveAll();
    }
}


当我已经在使用 @RestController 时,我真的需要使用 @RequestBody 注释吗?

最佳答案

@RestController 包含 @ResponseBody 因此您不再需要它。

但是您仍然需要 @RequestBody 注释,因为您为 POST 请求调用的方法可能包含多个参数,其中一个映射到请求正文,该方法的其他参数可能是 PathVariables 或例如 UriComponentsBuilder

并且为了标记要映射到请求体的参数,你需要注解。

关于java - Spring : Why should I still use @RequestBody when my class is already annotated with @RestController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343340/

相关文章:

java - 当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用

带有 pgBouncer 池的 Spring Boot 2

java - 找不到 int 类型的属性时间戳!走过的路径 : ScoreCard. 分数

javascript - 使用 REST Api 和 JS 时的时区问题

java - 为什么编译器更喜欢 char 的 int 重载而不是 varargs char 重载?

java - jenkins 无法执行目标 org.apache.maven.plugins :maven-release-plugin:2. 3.2:prepare (default-cli)

java - 使用 hibernate 检查数据库重复的优化方法

java - HTTP 状态 500 - java.lang.LinkageError

休息查询以列出 Kubernetes 中所有命名空间中的所有容器

iOS 5+ - 在执行请求时卡住主线程执行