में एक स्प्रिंग डेटा आरईएसटी यूआरआई को स्वीकार करना मेरे पास एक स्प्रिंग डेटा रेस्ट वेबएमवीसी एप्लीकेशन है जिसे मैं बैच ऑपरेशंस के लिए कुछ कस्टम कार्यक्षमता जोड़ना चाहता हूं।कस्टम नियंत्रक
मैंने एक नियंत्रक बनाया है, और इसे यूरी नेमस्पेस में मिश्रित किया है, लेकिन मैं चाहता हूं कि यह यूआरआई को कस्टम /search
प्रश्नों को केवल आईडी के बजाय स्वीकार करने में सक्षम हो।
मैं दर्ज की कोशिश की है एक कस्टम <String, Long>
कनवर्टर (मेरी इकाई एक Long
आईडी प्रकार है, लेकिन उस पर ध्यान नहीं दिया करने के लिए लगता है। मेरे नियंत्रक कॉन्फ़िगर करने के लिए ऐसी है कि वह स्वत: लागू किया एसडीआर नियंत्रकों से उस व्यवहार को गोद ले कोई तरीका है?
यहां तक कि अगर वहाँ विधि के कुछ प्रकार मैं उस इच्छा एक इकाई के लिए एक यूआरआइ ऑटो हल कॉल कर सकते हैं, कि बस के रूप में अच्छी तरह से काम करेगा (के रूप में मैं तो बस मेरे नियंत्रक में एक String
स्वीकार कर सकते हैं)
यहाँ जहां मैं हूं।
@Configuration
public class CustomWebConfiguration extends WebMvcConfigurationSupport {
//irrelevant code omitted
@Bean
public DomainClassConverter<?> domainClassConverter() {
DomainClassConverter<FormattingConversionService> dc = new DomainClassConverter<FormattingConversionService>(mvcConversionService());
return dc;
}
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(String.class, Long.class, testConverter());
}
@Bean
Converter<String, Long> testConverter() {
return new Converter<String, Long>() {
@Override
public Long convert(String source) {
//this code does _not_ get run at any point
if (source.indexOf('/') == -1) { return Long.parseLong(source); }
source = source.substring(source.lastIndexOf('/') + 1);
Long id = Long.parseLong(source);
return id;
}
};
}
}
एसडीआर कॉन्फ़िग
@Configuration
@EnableHypermediaSupport(type = { HypermediaType.HAL })
public class CustomRestConfiguration extends RepositoryRestMvcConfiguration {
@Override
public RepositoryRestConfiguration config() {
RepositoryRestConfiguration config = super.config();
config.setBasePath("/api");
config.exposeIdsFor(ApplicationMembership.class);
return config;
}
}
और मेरे (काल्पनिक) नियंत्रक:
ApplicationType मेरी संस्थाओं में से एक है कि सही ढंग से एसडीआर/भंडार जादू
@BasePathAwareController
@RepositoryRestController
@RequestMapping("applications/special")
public class ApplicationExtensionController {
@RequestMapping("a")
public ResponseEntity<?> reply(@RequestParam("type") ApplicationType type) {
return new ResponseEntity<String>(type.getIcon(), HttpStatus.OK);
}
}
मैं चारों ओर देखा है द्वारा प्रबंधित किया जाता है काफी कुछ लेकिन कुछ भी काम करने के लिए काफी प्रबंधन नहीं कर सकते हैं। जब मैं एक <String, ApplicationType>
कनवर्टर कि भंडार का इस्तेमाल करता है बनाने के लिए, यह भी नहीं कहा जाता है मिल के रूप में DomainClassConverter सिर्फ उसके अंतर्निहित <String, Long>
कनवर्टर (जो स्पष्ट रूप से विफल रहता है कहता है, इसे सही ढंग से एक लंबा में types/1
बाहर पार्स नहीं कर सकता के रूप में।
मदद की सराहना !
- स्प्रिंग डाटा बाकी 2.4.0
- स्प्रिंग HATEOAS 0.19.0
- स्प्रिंग 4 उल्लेख करने के लिए भूल .2.1
का उपयोग जेपीए खजाने
क्या आपने अपने नियंत्रक को @RepositoryRestController के साथ एनोटेट करने का प्रयास किया है? असल में, मुझे नियमित नियंत्रकों में PathVariables से एसडीआर इकाइयों को स्वत: प्राप्त करने में कोई समस्या नहीं थी, लेकिन फिर, मैं स्प्रिंग बूट का उपयोग कर रहा हूं और इसमें कुछ स्वत: कॉन्फ़िगरेशन भी शामिल है। –
मैं इसे जाने दूंगा, धन्यवाद Ilya! – CollinD
@IlyaNovoseltsev दुर्भाग्य से कोई पासा नहीं। मैं इसे पूछने में सक्षम होना चाहता हूं जैसे 'डोमेन /api/applications/batch/remove टाइप करें? प्रकार = प्रकार/7' लेकिन यह अभी भी त्रुटि को बदलने में असमर्थ है। – CollinD