java - 如何在 spring-rest 中嵌套@PathVariable?

标签 java spring rest spring-restcontroller

我有一个简单的@RestController 服务,它接受查询参数,spring 自动将它们解析为一个bean:

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@Valid MyParams p) {
    Sysout(p.getId()); //prints "123"
}

public class MyParams {
    private int id;
    //private SubParams subs;
}

查询:.../rest?id=123

现在我想用嵌套类构造参数对象。我怎样才能做到这一点?

public class SubParams {
   private String name;
   //some more
}

理想情况下,我的查询应该是:Query: .../rest?id=123&name=test,并且“test”字符串应该进入 SubParams bean。

这可能吗?

最佳答案

如果你需要设置为内部类,你必须注册一个Custom Covertor。更改如下:

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@ModelAttribute("subParam") MyParams params, @Valid MyParams p) {
    //Do stuff
}

subParam 表示有一个转换器注册用于转换。

public class MyParamsConverter implements Converter<String, MyParams> {

    @Override
    public MyParams convert(String name) {
        MyParams myParams = new MyParams();
        SubParams subParams = new SubParams();
        subParams.setName(name);
        myParams.setSubParams(subParams);
        return myParams;
    }

}

关于java - 如何在 spring-rest 中嵌套@PathVariable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327179/

相关文章:

java - Kotlin:ObjectBox 的组合实体类和 kotlinx.Serialization 有冲突吗?

java - 如何在 jax-rs 端点的路径参数中允许斜线

java - 如果 strings.xml 中存在未转义的撇号,如何使构建失败?

c# - 底层连接已关闭 : An unexpected error occurred on a receive

azure - WebJobs 未通过在 powershell 脚本中使用 Rest API Post 方法来停止 - 出现错误 403 - 此 Web 应用程序已停止

java - 获取错误400客户端发送的请求在语法上不正确(): Using RestTemplate, Spring

java - 为什么 Java 将此报告为类型不匹配?

java - 无法在 Spring RestController 中调用 REST 服务

java - 如何在Spring Boot中使用MySql数据库查询?

java - 将数据库密码保留在 spring-servlet.xml 文件之外