当前位置: 首页 > 知识库问答 >
问题:

如何在Pojo类中触发路径变量

白侯林
2023-03-14

我对spring boot很陌生,想做些新的事情。目前我有3个pojo类,它在user类中进行了扩展。我试图在所有setter id方法类中分配may@PathVariable partnerid的值,如下所示。我的问题是,spring boot是否提供了任何@annotation,可以将我的变量触发到我的Partner类中。我试图通过在setter方法中添加合作伙伴id来更新我的用户请求。

@RestController
@RequestMapping(value = "/push/fire/")
public class PushIdController {

    private final static Logger log = LoggerFactory.getLogger(PushIdController.class);

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    @RequestMapping(value = "/partner/{partnerId}", method = RequestMethod.POST)
    @annotation("new Partner().setPartnerId("PathVariable value")")
    public User userLogin(@PathVariable("partnerId")  String partnerId, @RequestBody User user){

        return user;

    }
}
public class Partner {

    private String partnerId;

    public String getPartnerId() {    return partnerId; }
    public void setPartnerId(String partnerId) { 
        this.partnerId = partnerId;
    }

    @Override
    public String toString() {
        return "Partner{" + "partnerId='" + partnerId + '\'' + '}';}
}
public class User {

    private final static Logger log = LoggerFactory.getLogger(User.class);

    private String userId;
    private Role role;
    private Video video;

     public void setUserId(String userId) {
        log.info("set-User-id");
        // getPartnerId null
        this.userId = userId + "_" + getPartnerId() ;
    }
    public void setRole(Role role) {
        log.info("set-User-Role");
        this.role = role;
    }

    public void setVideo(Video video) {
        log.info("set-User-Video");
        this.video = video;
    }
}
public class Role {

    private String roleId;

    public void setRoleId(String roleId) {
        // getPartnerId null
        this.roleId = roleId + "_"  +  getPartnerId();
    }

}
public class Video {

    private String videoId;

    public void setVideoId(String videoId) {
        this.videoId = videoId + "_"  + getPartnerId();
    }
}

Json请求:-

{
    "userId": "1d3ejjj",
    "userName": "Nabeel.amd93@gmail.com",
    "phone": "03153817177",
    "role": {
         "roleId": "d423",
          "name": "nabeel ahmed"
    },
    "video": {
        "videoId": "123456d",
        "h": "25",
        "w": "25"

    }
}

Json响应:-

{
    "userId": "1d3ejjj_1d2d6dq0jhjhk",
    "userName": "Nabeel.amd93@gmail.com",
    "phone": "03153817177",
    "role": {
         "roleId": "d423_1d2d6dq0jhjhk",
          "name": "nabeel ahmed"
    },
    "video": {
        "videoId": "123456d_1d2d6dq0jhjhk",
        "h": "25",
        "w": "25"

    }
}

正如我们所知,当我们在方法调用期间命中Json分配给Pojo调用setter方法的请求时,我只想更新每个类的id。我想像下面一样重新更新

user.setUserId(user.getUserId+"_"+partnerId);
user.getVideo().setVideoId(user.getVideo().getVideoId+"_"+partnerId);

并soo on......

共有1个答案

农明辉
2023-03-14

经过大量搜索,我找到了将path变量触发到Pojo类中的方法<@annotation调用“InitBinder”Spring提供了@InitBinder注释,用于识别初始化WebDataBinder的方法,该WebDataBinder将参数填充到带注释的方法。因此,简单的方法是在Spring中注册一些自定义编辑器。因此,我通过获取请求参数的值,将我的伙伴对象创建到方法中注意:-当我在顶部发布时,我忘记了使用变量partnerId添加静态关键字

伙伴班

public class Partner {

    public static String partnerId;

    public static String getPartnerId() {    return partnerId; }
    public void setPartnerId(String partnerId) {
       this.partnerId = partnerId;
    }

    @Override
    public String toString() {
       return "Partner{" + "partnerId='" + partnerId + '\'' + '}';}
    }
}

在数据之后,我将此方法添加到我的控制器中,如

@InitBinder
public void initBinder(final WebDataBinder webdataBinder) {
    webdataBinder.registerCustomEditor(String.class, new PartnerFireId());
}

和PartnerFireId类

public class PartnerFireId extends PropertyEditorSupport {

    private Partner partner;

    public void setAsText(final String partnerKey) throws IllegalArgumentException {
        partner = new Partner();
        partner.setPartnerId(partnerKey);
    }

}

 类似资料:
  • 首先,我不完全确定这是正确的问题。基本上,我的最终目标是生成一个可以操作一组。docx文件的程序,以便对每个文件进行小的更改。在我看来,docx4j是实现这一目标的最佳方式。但是,我从来没有使用过提供的库之外的库。我首先试图破译手册中提供的所有信息,然后告诉我需要SLF4J才能使用Docx4J。 从这一点来看,我想我做错了什么。我很确定我知道我想写的程序背后的伪逻辑,但我不确定如何写它。我还没有做

  • 选择路径、线段和锚点 在改变路径形状或编辑路径之前,必须选择路径的锚点和/或线段。 选择锚点 请执行下列任一操作: 如果能够看见这些点,则可以使用“直接选择”工具 单击它们以进行选择。按住 Shift 键并单击可选择多个锚点。 选择直接选择工具并在锚点周围拖动边界。按住 Shift 键并在其他锚点周围拖移以选择它们。 您可以从已选或未选路径中选择锚点。将直接选择工具移动到锚点上方,直到指针以放大状

  • 选择路径、线段和锚点 在改变路径形状或编辑路径之前,必须选择路径的锚点和/或线段。 选择锚点 请执行下列任一操作: 如果能够看见这些点,则可以使用“直接选择”工具 单击它们以进行选择。按住 Shift 键并单击可选择多个锚点。 选择直接选择工具并在锚点周围拖动边界。按住 Shift 键并在其他锚点周围拖移以选择它们。 您可以从已选或未选路径中选择锚点。将直接选择工具移动到锚点上方,直到指针以放大状

  • 问题内容: 我有很多jar文件要添加到我的类路径中,因此,每次编译Java文件时,都会得到如下命令: 我尝试使用: 然后: 但是根本没有添加jar:由于缺少jar,我得到了错误信息…谢谢 问题答案: 也许您想尝试使用Maven来构建您的应用程序?它真的很容易设置,并且消除了依赖管理的所有问题。 同样从Java 6开始,您可以在类路径中使用通配符: set CLASSPATH = my_libs \

  • 问题内容: 我正在尝试开发一个Java代理,它将借助asm-4来检测代码。现在,我陷入了一个非常基本的问题,javaagent的类加载器看不到asm依赖关系,因此失败。我是否必须提供一个jar- with- dependencies(又名maven构建插件),其中包含代理所需的所有类,或者是否有另一种方法可将类添加到Java代理?直接在类路径中引用jar asm-all.jar并没有帮助。最初,构

  • 有没有可能不初始化类的所有字段,而只是使直类路径变量? 我知道我可以为此使用POST请求,但在这种情况下,我需要GET请求。 我想要这个@GetMapping(“/get/{classDTO}”) public String getMethod(@PathVariable classDTO classDTO) 而不是这个@GetMapping(“/get”) public String getMe