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

如何指示Spring REST方法的PathVariable?

凌波峻
2023-03-14

我想指出pathvariable secondpart。这是不可能的,因为错误消息显示:无法确定:veranstaltung的类型。Identificationnumber,在表中:teilnehmer,用于列:[org.hibernate.mapping.Column(id)]

要使用变量secondpart,我必须更改什么?如何访问控制器方法中的变量secondpart?

    package veranstaltung;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Teilnehmer {


static int idnumber=69;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Identificationnumber id;
private String name;
private String vorname;
private String wohnort;

protected Teilnehmer() {}

public Teilnehmer(Identificationnumber id, String name, String vorname,String wohnort)
{
    this.id=id;
    this.name=name;
    this.vorname=vorname;
    this.wohnort=wohnort;
}


public static String erzeugeID ()
{
    String id= "JAVALAND-";
    id=id+idnumber;
    idnumber++;
    return id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getVorname() {
    return vorname;
}

public void setVorname(String vorname) {
    this.vorname = vorname;
}

public String getWohnort() {
    return wohnort;
}

public void setWohnort(String wohnort) {
    this.wohnort = wohnort;
}


@Override
public String toString()
{
    return  id.getfullID()+" "+getName()+" "+getVorname()+" "+getWohnort();
}

}

    package veranstaltung;

public class Identificationnumber {


private String firstpart;
private Long secondpart;

public Identificationnumber(String firstpart, Long secondpart)
{
    this.firstpart=firstpart;
    this.secondpart=secondpart;
}


public String getFirstpart() {
    return firstpart;
}

public void setFirstpart(String firstpart) {
    this.firstpart = firstpart;
}

public Long getSecondpart() {
    return secondpart;
}

public void setSecondpart(Long secondpart) {
    this.secondpart = secondpart;
}

public String getfullID()
{
    return firstpart+' '+secondpart;
}

}

    package veranstaltung;

import veranstaltung.Teilnehmer;
import veranstaltung.Identificationnumber;
import veranstaltung.TeilnehmerRepository;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
public class TeilnehmerController {

@Autowired
TeilnehmerRepository teilnehmerRepository;


@GetMapping("/teilnehmer")
    Iterable<Teilnehmer> teilnehmer(){
        return this.teilnehmerRepository.findAll();
    }

@GetMapping("/teilnehmer/{id}")
Teilnehmer teilnehmerById(@PathVariable Long secondpart){
    Optional<Teilnehmer> teilnehmerOptional = this.teilnehmerRepository.findById(secondpart);
    if(teilnehmerOptional.isPresent()) {
        return teilnehmerOptional.get();
    }
    return null;
}

}

共有1个答案

齐航
2023-03-14

您的标识号不是基元,而是自定义类。您所做的是尝试在teilnehmerById方法中对您的标识号使用Long。

我建议您将Teilnehmer的Id列从Identificationnumber更改为Long,或者您仍然可以通过如下操作在TeilnehmerID方法中传递Identificationnumber(考虑到您已经实现了自己的findById,它将把Identificationnumber转换为Long):

@GetMapping("/teilnehmer/{id}")
Teilnehmer teilnehmerById(@PathVariable Long secondpart){
     Identificationnumber number = new Identificationnumber(0,secondpart);
  
    Optional<Teilnehmer> teilnehmerOptional = this.teilnehmerRepository.findById(number);
    if(teilnehmerOptional.isPresent()) {
        return teilnehmerOptional.get();
    }
    return null;

基于Hibernate错误,看起来您必须使用我的第一个选项,即将Teilnehmer@Id更改为Long

 类似资料:
  • 问题内容: 例如,在Java中,注释不仅提供覆盖的编译时检查,而且还提供了出色的自记录代码。 我只是在寻找文档(尽管如果它是指示诸如pylint之类的检查器的指标,那是一个额外的好处)。我可以在某处添加注释或文档字符串,但是在Python中指示替代的惯用方式是什么? 问题答案: 基于此和fwc:s的答案,我创建了一个pip可安装软件包 https://github.com/mkorpela/ove

  • 本文向大家介绍TabLayout实现ViewPager指示器的方法,包括了TabLayout实现ViewPager指示器的方法的使用技巧和注意事项,需要的朋友参考一下 在TabLayout出现之前,基本都是通过 ViewPager+FragmentPagerAdapter+第三方开源tab指示器(TabPageIndicator)来实现的。现在Android内部提供了现成的TabLayout控件来

  • 问题内容: 如何打印指示的div(而无需手动禁用页面上的所有其他内容)? 我想避免使用新的预览对话框,因此使用此内容创建新窗口没有用。 该页面包含几个表,其中一个表包含我要打印的div-该表已通过网络的视觉样式进行了样式设置,因此不应以打印形式显示。 问题答案: 这是一个通用的解决方案, 仅 使用 CSS ,我已经验证可以使用。 替代方法不是很好。使用是棘手的,因为如果有任何元素,则任何后代都不会

  • 问题内容: 我想知道如何列出对象可用的所有方法,例如: 这应该打印: 问题答案: 您可以用来获取属于某个对象的所有属性(无论是否可枚举)。例如: 然后,您可以使用来仅获取方法: 在ES3浏览器(IE8及更低版本)中,内置对象的属性不可枚举。像和不是内置的对象,它们是由浏览器定义的,很可能是通过设计枚举的。 从ECMA-262第3版开始: 全局对象 有一个唯一的全局对象(15.1),它在控制进入任何

  • 本文向大家介绍Android TabLayout设置指示器宽度的方法,包括了Android TabLayout设置指示器宽度的方法的使用技巧和注意事项,需要的朋友参考一下 anroid 5.0 Design  v7 包中引用了TabLayout 简单快速的写出属于自己的Tab切换效果 如图所示: 但是正常使用中你发现无法设置tablayout指示器的宽度。查看源码你会发现设计师将指示器的宽度设置成

  • 我是IntelliJ的新手,最近更新到IntelliJ-2016.3。 在Java代码编辑器中,它显示了使用时的方法签名。如何禁用此功能? 这个行为在2016.1.4版本是没有的。更新后我看到了这个。 感谢任何帮助!