Java @ResponseBody和@PostMapping之间的冗余(路径=";/test";,消耗=…,产生=MediaType.APPLICATION_JSON_值)?
关于Java @ResponseBody和@PostMapping之间的冗余(路径=";/test";,消耗=…,产生=MediaType.APPLICATION_JSON_值)?,java,spring,spring-boot,Java,Spring,Spring Boot,关于 @ResponseBody and @XXXMapping([...] produces = MediaType.APPLICATION_JSON_VALUE) 他们实现了完全相同的目标吗 将两者结合在一起是多余的吗 如果没有,区别是什么 如果是,应该选择哪一个 把两者结合在一起能带来什么积极的影响?我们应该将两者结合在一起的任何用例 谢谢@ResponseBody通常与@Controller一起用于ajax端点,让spring知道您没有呈现html页面,您想返回json,或者如果您配
@ResponseBody and @XXXMapping([...] produces = MediaType.APPLICATION_JSON_VALUE)
他们实现了完全相同的目标吗
将两者结合在一起是多余的吗
如果没有,区别是什么
如果是,应该选择哪一个
把两者结合在一起能带来什么积极的影响?我们应该将两者结合在一起的任何用例
谢谢
@ResponseBody
通常与@Controller
一起用于ajax端点,让spring知道您没有呈现html页面,您想返回json,或者如果您配置了json、xml等。如果您使用的是@RestController
,则无需返回。这有点像的重复,但我想这有点不同,具体来说,@PostMapping是一个组合注释,充当@RequestMapping(method=RequestMethod.POST)的快捷方式
@ResponseBody注释告诉控制器返回的对象被自动序列化为JSON并传递回HttpResponse对象
假设我们有一个自定义响应对象:
public class ResponseTransfer {
private String text;
// standard getters/setters
}
Next, the associated controller can be implemented:
@Controller
@RequestMapping("/post")
public class ExamplePostController {
@Autowired
ExampleService exampleService;
@PostMapping("/response")
@ResponseBody
public ResponseTransfer postResponseController(
@RequestBody LoginForm loginForm) {
return new ResponseTransfer("Thanks For Posting!!!");
}
}
在浏览器的开发者控制台或使用Postman等工具,我们可以看到以下响应:
{“文本”:“感谢发帖!!!”}
记住,我们不需要用@ResponseBody注释来注释@RestController注释的控制器,因为Spring默认会这样做
让我们实现一个新方法,映射到相同的/content路径,但返回XML内容:
@PostMapping(value = "/content", produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public ResponseTransfer postResponseXmlContent(
@RequestBody LoginForm loginForm) {
return new ResponseTransfer("XML Content!");
}
@ResponseBody
是自v3.0以来的遗留注释,而@XXXMapping
是在v4.3
@sidgate中引入的更好的替代方法。您混淆了@ResponseBody
和@RequestMapping
。是的,没错@PostMapping
只是@RequestMapping(method=RequestMethod.POST)
我的问题实际上介于@ResponseBody和@PostMapping/@GetMapping/@xxxMapping之间,但是products=MediaType.APPLICATION\u JSON\u值:)