繁体   English   中英

如何在自定义Spring Data Rest控制器中正确处理POST?

[英]how to properly handle POST in a custom Spring Data Rest controller?

在我的Spring Data Rest应用程序中,我有一个标准存储库:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {

        List<Person> findByLastName(@Param("name") String name);

}

我还有一个自定义控制器,它将在HTTP POST上实现一些其他逻辑:

@RestController
@RequestMapping("/people")
public class PersonController {
    @RequestMapping(value = "/**", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<String> savePerson(@RequestBody Person person, UriComponentsBuilder b, @RequestParam Map<String, ?> id) {


        UriComponents uriComponents = 
                b.path("/people/").buildAndExpand();
        HttpHeaders responseHeaders = new HttpHeaders();
           responseHeaders.setLocation(uriComponents.toUri());
           responseHeaders.set("MyResponseHeader", "MyValue");
        return new ResponseEntity<String>("Hello World\n\n", responseHeaders, HttpStatus.CREATED);
    }
}

因为我没有显式使用Hibernate Entity Manager,所以在该控制器中保存“ Person”实体的正确方法是什么? “ person”参数只是一个POJO,因此它没有任何持久性CRUD方法。

如果PersonRepository中使用的Person类与控制器中用于将RequestBody映射到的类相同,则在控制器方法中,您可以只进行personRepository.save(person)-假设personRepository是PersonRepository类的自动装配实例。

我猜想,您正在尝试使用Spring Data Rest https://spring.io/guides/gs/accessing-data-rest/ 在这种情况下,您的类路径中可能有内存数据库com.h2database:h2。 这就是为什么在给定的示例中,即使您没有配置数据库或向您的person类添加任何JPA批注,一切都可以正常工作的原因。 因此,您仍然可以从自定义控制器执行personRepository.save(person),而无需在Person类中包含任何JPA批注。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM