我目前正在使用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();
}
}
当我已经使用@RestController时,我真的需要使用@RequestBody注释吗?
答案 0 :(得分:4)
@RestController
包含@ResponseBody
,因此您不再需要这样做了。
但您仍然需要@RequestBody
注释,因为您为POST请求调用的方法可能包含多个参数,其中一个参数映射到请求主体,该方法的其他参数可能是PathVariables或例如UriComponentsBuilder。
要标记要映射到请求正文的参数,您需要注释。
答案 1 :(得分:0)
更新: 是的,你仍然需要@RequestBody,因为你正在进行POST。如果你改变了一个获得,你真的不需要它。当您尝试执行REST API时,应尝试使用HTTP状态代码。
获取请求信息。 POST或PUT用于创建/更新信息 删除以删除信息。
根据documentation你不需要写@ResponseBody
为方便起见,您可以使用@RestController注释控制器类,而不是使用@ResponseBody注释所有@RequestMapping方法。
@RestController是一个结合@ResponseBody和@Controller的构造型注释。更重要的是,它为您的Controller提供了更多的意义,并且可能在未来的框架版本中带来额外的语义。
我认为您应该从类中删除method = RequestMethod.POST并将其添加到每个方法上。 retrieveAll方法应该是GET而不是POST。
答案 2 :(得分:0)
@RestController
@RequestMapping("/test")
public class TestController {
private static final Logger logger = LoggerFactory.getLogger(TestController.class);
@PostMapping(path = "/insert", consumes = "application/json", produces = "application/json")
public void insertMethod(@RequestBody TestEntity t) {
testService.insertData(t);
}
如果不添加@RequestBody,它将插入空值(应使用),因为@RestController是@RestController的一部分,因此无需使用@ResponseBody。