나는 같은 개체에 추가 링크를 추가 할 :스프링 데이터 나머지를 사용하여 엔티티에 새 _link를 추가하는 방법은 무엇입니까? 나는 다음과 같은 문제에 직면하고있어
"_links": {
"self": {
"href": "http://localhost:8080/api/organizaciones"
},
"profile": {
"href": "http://localhost:8080/api/profile/organizaciones"
},
"search": {
"href": "http://localhost:8080/api/organizaciones/search"
},
"disable": {
"href": "http://localhost:8080/api/organizaciones/disable"
}
}
이 시나리오 뒤에 아이디어는 내가 부드러운 Organizacion 엔티티 내에서 자신의 링크를 통해 삭제 노출 필요가있다 ... 지금 내가 할 만 수 있어요 :
소프트가 ... 삭제 수행하기 위해http://localhost:8080/api/organizaciones/search/disable?id=100
는 어떻게이 올바른 방법으로 달성 할 수있는 사람을 알고 있습니까? 아니면 컨트롤러를 만드는 유일한 대안입니까?
고맙습니다.
참고 : 나는 마침내 그것을 알아 냈
, 내가 (감사합니다) 아래의 코멘트에 알렉스가 무엇을 언급했다. 먼저 다음과 같은 구성 요소를 생성 restbucks
1)
:가 BTW 내가 더 정확한 자신의 예 중 하나를 선택 @olivergieke하는 스프링 데이터 나머지의 아버지에게 신용을 제공 한
@Component
@RequiredArgsConstructor
public class OrganizacionResourceProcessor implements ResourceProcessor<Resource<Organizacion>>{
private static final String DISABLE_REL = "deshabilitar";
private static final String ENABLE_REL = "habilitar";
private final @NonNull EntityLinks entityLinks;
@Override
public Resource<Organizacion> process(Resource<Organizacion> resource) {
Organizacion organizacion = resource.getContent();
if(organizacion.isEnabled()){
resource.add(entityLinks.linkForSingleResource(Organizacion.class, organizacion.getId()).slash(DISABLE_REL).withRel(DISABLE_REL));
}
if(organizacion.isDisabled()){
resource.add(entityLinks.linkForSingleResource(Organizacion.class, organizacion.getId()).slash(ENABLE_REL).withRel(ENABLE_REL));
}
return resource;
}
}
나서 ...
@RepositoryRestController
@RequestMapping("/organizaciones")
@ExposesResourceFor(Organizacion.class)
@RequiredArgsConstructor
@Slf4j
@Transactional
public class OrganizacionController {
private final @NonNull OrganizacionRepository organizacionRepository;
private final @NonNull EntityLinks entityLinks;
@GetMapping(value="/{id}/habilitar")
public ResponseEntity<?> desactivarOrganizacion(@PathVariable("id") Long id) {
Preconditions.checkNotNull(id);
Organizacion organizacion = organizacionRepository.findOne(id);
if(organizacion == null){
return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
}
organizacion.setEstado(Estado.DESHABILITADO);
Organizacion pOrg = this.organizacionRepository.save(organizacion);
HttpHeaders header = new HttpHeaders();
header.setLocation(this.entityLinks.linkForSingleResource(Organizacion.class, pOrg.getId()).toUri());//construimos el URL
return new ResponseEntity<Void>(header,HttpStatus.CREATED);
}
@GetMapping(value="/{id}/deshabilitar")
public ResponseEntity<?> activarOrganizacion(@PathVariable("id") Long id){
Preconditions.checkNotNull(id);
Organizacion organizacion = organizacionRepository.findOne(id);
if(organizacion == null){
return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
}
organizacion.setEstado(Estado.ACTIVO);
Organizacion pOrg = this.organizacionRepository.save(organizacion);
HttpHeaders header = new HttpHeaders();
header.setLocation(this.entityLinks.linkForSingleResource(Organizacion.class, pOrg.getId()).toUri());//construimos el URL
return new ResponseEntity<Void>(header,HttpStatus.CREATED);
}
}
을 두 동작을 지원하기 위해 컨트롤러를 생성하고 그것을이었다.
감사합니다.
정확히 무엇이 문제입니까? – zeroflagL