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

关于java - 如何在自定义Spring Data Rest Controller 中正确处理POST?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40049805/

10-09 05:14