我在界面写了请求映射,但是它没有工作。
请求/响应机构POJO:
public class ReqAa {
private String firstValue;
private String secondValue;
public String getFirstValue() {
return firstValue;
}
public ReqAa setFirstValue(String firstValue) {
this.firstValue = firstValue;
return this;
}
public String getSecondValue() {
return secondValue;
}
public ReqAa setSecondValue(String secondValue) {
this.secondValue = secondValue;
return this;
}
}
public class RespAa{
private String status;
RespAa(String status){
this.status = status;
}
public String getStatus() {
return status;
}
public RespAa setStatus(String status) {
this.status = status;
return this;
}
}
接口:
public interface A{
interface Aa{
@PostMapping("/do/something")
RespAa doSomething(@RequestBody ReqAa);
}
interface Ab{
@PostMapping("/do/another")
RespAb doAnother(@RequestBody ReqAb);
}
}
@PreAuthorize("hasAuthority('admin')")
@RequestMapping("/api/admin")
public interface IClient extends A.Aa{
}
休息控制器:
@RestController
public class Client implements IClient{
@Override
public RespAa doSomething(ReqAa reqAa) {
return new RespAa("SUCCESS");
}
}
Spring boot @RequestBody
无法映射为Body。它把它作为参数。
示例:
生成的请求:/api/admin/do/something?firstValue=fv&secondValue=sv
预期映射:/api/admin/do/something
requestBody:{ "firstValue":"fv","secondValue":"sv"}
当我在实现方法中使用@RequestBody时它的工作。
@RestController
public class Client implements IClient{
@Override
public RespAa doSomething(@RequestBody ReqAa reqAa) {
return new RespAa("SUCCESS");
}
}
我使用的是春季启动版:1.5.10
。
答案 0 :(得分:2)
我使用界面默认方法解决了我的问题。 这里的工作代码:
接口:
public interface A{
interface Aa{
RespAa doSomething(ReqAa);
@PostMapping("/do/something")
default RespAa dDoSomething(@RequestBody ReqAa){
return doSomething(ReqAa);
}
}
interface Ab{
@PostMapping("/do/another")
RespAb doAnother(@RequestBody ReqAb);
}
}
@PreAuthorize("hasAuthority('admin')")
@RequestMapping("/api/admin")
public interface IClient extends A.Aa{
}
休息控制器:
@RestController
public class Client implements IClient{
@Override
public RespAa doSomething(ReqAa reqAa) {
return new RespAa("SUCCESS");
}
}