मैं RepositoryRestResource से स्वत: जनरेट अंतिम बिंदुओं को कुछ अतिरिक्त व्यापार तर्क जोड़ने का प्रयास कर रहा हूँ। कृपया नीचे दिए गए कोड देखें:स्प्रिंग डाटा आराम/स्प्रिंग Hateoas कस्टम नियंत्रक - PersistentEntityResourceAssembler
संसाधन:
@RepositoryRestResource(collectionResourceRel="event", path="event")
public interface EventRepository extends PagingAndSortingRepository<Event, Long> {
}
नियंत्रक:
@RepositoryRestController
@RequestMapping(value = "/event")
public class EventController {
@Autowired
private EventRepository eventRepository;
@Autowired
private PagedResourcesAssembler<Event> pagedResourcesAssembler;
@RequestMapping(method = RequestMethod.GET, value = "")
@ResponseBody
public PagedResources<PersistentEntityResource> getEvents(Pageable pageable,
PersistentEntityResourceAssembler persistentEntityResourceAssembler) {
Page<Event> events = eventRepository.findAll(pageable);
return pagedResourcesAssembler.toResource(events, persistentEntityResourceAssembler);
}
}
मैं निम्नलिखित दो stackoverflow लेख देखा है:
- Can I make a custom controller mirror the formatting of Spring-Data-Rest/Spring-Hateoas generated classes?
- Enable HAL serialization in Spring Boot for custom controller method
मुझे लगता है कि मैं पास हूँ, लेकिन समस्या यह है कि मैं का सामना करना पड़ रहा है जो:
return pagedResourcesAssembler.toResource(events, persistentEntityResourceAssembler);
कह एक त्रुटि देता है:
"The method toResource(Page<Event>, Link) in the type PagedResourcesAssembler<Event> is not applicable
for the arguments (Page<Event>, PersistentEntityResourceAssembler)".
toResource विधि एक विधि हस्ताक्षर है एक रिसोर्सएस्सेबलर स्वीकार करता है, लेकिन मुझे यकीन नहीं है कि इसे ठीक से कैसे कार्यान्वित किया जाए और मुझे इस मामले पर कोई दस्तावेज नहीं मिल रहा है।
अग्रिम धन्यवाद, - ब्रायन
संपादित
मेरे मुद्दा मैंने सोचा था कि मैं अपने खुद के संसाधन बनाए बिना नियंत्रक तरीकों कि स्वतः निर्मित @RepositoryRestResource
एनोटेशन से हैं रद्द कर सकते थे था और संसाधन असेंबलर। संसाधन और संसाधन असेंबलर बनाने के बाद मैं एंडपॉइंट पर अपना व्यावसायिक तर्क जोड़ सकता था।
संसाधन:
public class EventResource extends ResourceSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
संसाधन असेंबलर:
@Component
public class EventResourceAssembler extends ResourceAssemblerSupport<Event, EventResource> {
public EventResourceAssembler() {
super(EventController.class, EventResource.class);
}
@Override
public EventResource toResource(Event entity) {
EventResource eventResource = createResourceWithId(entity.getId(), entity);
eventResource.setName(entity.getName());
return eventResource;
}
}
अपडेट किया गया नियंत्रक:
@RepositoryRestController
@RequestMapping(value = "/event")
public class EventController {
@Autowired
private EventRepository eventRepository;
@Autowired
private EventResourceAssembler eventResourceAssembler;
@Autowired
private PagedResourcesAssembler<Event> pageAssembler;
@RequestMapping(method = RequestMethod.GET, value = "")
@ResponseBody
public PagedResources<EventResource> getEvents(Pageable pageable) {
Page<Event> events = eventRepository.findAll(pageable);
// business logic
return pageAssembler.toResource(events, eventResourceAssembler);
}
}
बात मैं इस बारे में पसंद नहीं है कि यह उद्देश्य को हराने के लिए लगता है एक RepositoryRestResource होने के। दूसरा दृष्टिकोण इवेंट हैंडलर का उपयोग करना होगा जो पहले और/या बनाने, सहेजने, ऑपरेशन हटाने के बाद बुलाए जाएंगे।
@RepositoryEventHandler(Event.class)
public class EventRepositoryEventHandler {
@HandleBeforeCreate
private void handleEventCreate(Event event) {
System.out.println("1");
}
}
खोजने के लिए कोई घटना नहीं प्रतीत होती है या सभी ऑपरेशन ढूंढते हैं। वैसे भी, ये दोनों दृष्टिकोण RepositoryRestResource से ऑटो जनरेटेड नियंत्रक विधियों को विस्तारित करने की मेरी समस्या को हल करने लगते हैं।
http://stackoverflow.com/questions/21346387/how-to-correctly-use-pagedresourcesassembler-from-spring-data कुछ और जानकारी प्रदान कर सकता है। – Jason
@ जेसन धन्यवाद इस लिंक ने मुझे सही दिशा में कदम रखने में मदद की। – bmclachlin