2016-10-14 4 views
0

в моем приложении Spring Data Rest У меня есть стандартный репозиторий:как правильно обрабатывать POST в пользовательском контроллере хранения данных Spring?

@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); 
    } 
} 

Что такое правильный способ сохранить мой объект «Person» в этом контроллере, поскольку я не использую Hibernate Entity Manager явно? Параметр «person» - это просто POJO, поэтому у него нет никаких методов CRUD настойчивости.

ответ

1

Если класс Person, используемый в PersonRepository, аналогичен тому, что вы используете в контроллере для сопоставления RequestBody, то в методе контроллера вы можете просто сделать personRepository.save (person) - Предполагая, что personRepository является экземпляром Autwired класса PersonRepository.

Я предполагаю, что вы экспериментируете с весенним покоем данных https://spring.io/guides/gs/accessing-data-rest/. Если это так, у вас может быть база данных в базе данных com.h2database: h2 в вашем пути к классу. Вот почему в данном примере все работает, даже если вы даже не настраиваете базу данных или не добавляете какие-либо аннотации JPA к вашему классу person. Таким образом, вы все равно можете сделать personRepository.save (person) из своего пользовательского контроллера без каких-либо аннотаций JPA в вашем классе Person.

 Смежные вопросы

  • Нет связанных вопросов^_^