我目前正在将Java和Spring用于我的Web服务应用程序。我正在使用@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();
    }
}

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

最佳答案

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

但是您仍然需要@RequestBody批注,因为调用POST请求的方法可能包含多个参数,其中一个参数映射到请求主体,该方法的其他参数可能是PathVariablesUriComponentsBuilder

为了标记要映射到请求正文的参数,您需要注释。

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

10-10 16:31