在接口

时间:2018-03-04 09:15:23

标签: spring-mvc spring-boot

我在界面写了请求映射,但是它没有工作。

请求/响应机构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

1 个答案:

答案 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");
    }
}