Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ResponseBody和@PostMapping之间的冗余(路径=";/test";,消耗=…,产生=MediaType.APPLICATION_JSON_值)?_Java_Spring_Spring Boot - Fatal编程技术网

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值:)