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

如何使用Spring启动从json更新数据

谭宜
2023-03-14

我用一个名为“Person”的对象创建了一个表,我可以从Postman发布、删除和放置。我对如何从postman中输入的JSON创建新查询没有问题。但是,每当我尝试删除或更新(使用put)我的查询时,我都会使用@PathVariable选择我想要的查询,并使用@RequestVariable更新所选数据。但我希望能够从JSON文件中删除或更新。下面是我的代码的样子。

人与物

@Entity
@Table(name="person")
public class Person {
    @Id
    @SequenceGenerator(
            name = "person_sequence",
            sequenceName = "person_sequence",
            allocationSize = 1
    )
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "person_sequence"
    )
    @Column(name="id")
    private Long id;
    private String name;
    private String lastname;
}
//Getters, Setters, Constructors and ToString is here

个人控制器

@RestController
@RequestMapping(path = "api/v1/person")
public class PersonController {

    private final PersonService personService;

    @Autowired
    public PersonController(PersonService personService) {
        this.personService = personService;
    }
    //@GetMapping
    //@PostMapping

    @DeleteMapping(path = "{personId}")
    public void deletePerson(@PathVariable("personId") Long personId{
        personService.deletePerson(personId);
    }

    @PutMapping(path = "{personId}")
    public void updatePerson(@PathVariable("personId") Long personId,
                              @RequestParam(required = false) String name,
                              @RequestParam(required = false) String lastname){
        personService.updatePersonService(personId, name, lastname);
    }
}

这是我的PersonRepository界面

@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
}

我对Spring Boot很不熟悉。如果我能在@PutMap和@DeleteMap中得到一个代码,那就太好了,而且代码在个人服务类的请求中会是什么样子。

共有2个答案

鞠嘉志
2023-03-14

通常情况下,对请求主体使用删除方法,相反,您可以使用put方法。此外,为JSON序列化创建单独的(Dto)对象也是一个很好的实践。

@PutMapping()
public void deletePerson(@RequestBody PersonDto person){
    personService.deletePerson(person.getId());
}

此外,如果要创建或更新实体,可以使用请求主体。

@PutMapping(path = "{personId}")
public void updatePerson(@PathVariable("personId") Long personId, @RequestBody PersonDto person){
    personService.updatePersonService(personId, person);
}
欧阳乐生
2023-03-14

所以你想用“json内容”替换RequestParams,对吗?如果是这样,您可以使用:

@Valid @RequestBody final Person person

顺便说一句,你的删除方法就这样吧,删除中使用实体的id就可以了,没有必要有请求体

另外,我会创建一个新实体PersonDTO,并将其用于控制器/服务组件,并将您的人员重命名为PersonDAO,仅用于存储库组件

 类似资料:
  • 我正在使用plugin jQuery datatables并加载我在页面底部DOM中加载的数据,并以以下方式启动插件: 现在,在执行一些操作后,我想使用ajax获得新数据(但不是ajax选项构建在数据中-不要误会我!)并用这些数据更新表。如何使用数据API做到这一点?留档很混乱,我找不到解决办法。任何帮助将非常感谢。谢谢。

  • 我有以下不便之处,我想只使用PostgreSQL更新JSON数组的键。我有以下json: 如果“othern”=X,我需要将“othern”更新为另一个数字 (X是我传递给查询的任何数字。例如,如果othern=5,则更新othern)。 这个JSON可能要大得多,所以我需要一些可以在JSON数组中迭代的东西,找到所有与X数匹配的“othern”,并替换为新的。非常感谢。 我尝试了Postgres

  • 这个问题几乎说明了一切。使用JPARepository,我如何更新一个实体? JPARepository只有一个save方法,它并不告诉我它实际上是create还是update。例如,我向数据库用户插入一个简单的对象,它有三个字段:、和: 然后我只需调用,此时它实际上是对数据库的插入: 到目前为止还不错。现在我想更新这个用户,比如说改变他的年龄。为此,我可以使用查询,无论是QueryDSL还是Na

  • 我正在开发一个Spring Boot Kotlin应用程序,希望加快bootRun启动和devtools重启时间。当前重新启动大约需要20-30秒,与可能热重新加载时近即时刷新前端更改相比,这感觉非常缓慢。 我正在使用macOS Big Sur 11.6.7和Amazon corretto 17 JDK

  • 问题内容: 我已配置logstash.conf以动态插入数据库的数据,但问题是: 当我更改表的一行时,该行不会在索引中更新,因为我仅在sql_last_value之后插入新值,尽管我是关于触发器的,但我不确定该怎么做。 问题答案: 如果用于选择行,则不能这样做。您有2种选择, 每次都选择所有行,然后使用query将它们发送到ES ,根据您的情况,我认为这不是一个好选择。 创建一个新列,其中包含记录

  • 问题内容: 我有一个如下的json文件,我想使用更新值 update.json 我想编写一个PowerShell脚本,在其中 如何使用参数? 问题答案: 这是一种方法: 根据@FLGMwt和@mikemaccana,我改进了with,因为默认深度值为2,对于深度大于2的对象,尽管有对象,您仍会收到类信息。