Spring Boot aktuatori so'nggi nuqtalari uchun MIME turiga javob

Men 1.4.x dan 1.5.1 ga bahor yuklash dasturini yangiladim va Bahor Aktuatorining so'nggi nuqtalari endi boshqa MIME turini qaytaradi:

Masalan, /health shunchaki application/json o'rniga application/vnd.spring-boot.actuator.v1 + json hisoblanadi.

Buni qanday o'zgartirish mumkin?

22

9 javoblar

Oxirgi fikrlar mijozning so'rovini qabul qilishi mumkinligini bildiradigan kontent turini qaytaradi. Mijoz agar so'ragan Accept sarlavhasini yuborsa application/json javobini olasiz:

Accept: application/json
14
qo'shib qo'ydi
Firefox Quantum foydalanuvchilari uchun ushbu kengaytma yordamida jsonni to'g'ri ko'rsatishingiz mumkin: addons.mozilla.org/en-US/firefox/addon/…
qo'shib qo'ydi muallif SeB.Fr, manba
"Ajratilgan narsalar" javob organining tuzilishini o'zgartirish demakdir. Yaxshi yozilgan dastur 1.5 o'zgarishidan ta'sirlanmasligi kerak.
qo'shib qo'ydi muallif Andy Wilkinson, manba
@kap Firefox brauzeri brauzerning yangi versiyalari yaxshi o'rnatilgan JSON tomoshabiniga ega bo'lsa-da, lekin application/vnd.spring-boot.actuator.v1 + json ni tan olmang haqiqiy JSON turi. JSONView plaginini quyidagi ikkita variantni tekshirib foydalanishingiz mumkin: HTTP qabul qilish sarlavhasida "application/json" so'rovlarini va Ichki Firefox JSON viewer ilovasidan foydalaning. Bu brauzerni javob sifatida application/json deb so'rashi mumkin, ammo JSONView javobni o'qishga xalaqit bermaydi, u Firefox tomonidan oddiy JSON sifatida o'qiladi.
qo'shib qo'ydi muallif jihor, manba
OK, hech bo'lmasa o'z arizamim va yaxshi ish tutadigan boshqa odamlar uchun ishlaydi. Firefox uchun ba'zi sozlamalarni qidirishim kerak, ular har doim ularni ko'rsatish o'rniga endpointlarni yuklab olishadi. Rahmat.
qo'shib qo'ydi muallif kap, manba
Rahmat, lekin men ushbu ma'lumotni mobil ilovani ishlab chiquvchilariga yuboraman deb o'ylamayman :-) Buning o'rniga, sog'lik API-ni quyidagi kabi narsalarni silliq ushlab turish uchun bekor qilasiz.
qo'shib qo'ydi muallif hirro, manba
qo'shib qo'ydi muallif hirro, manba
Men ham bunga qodir edim. Nima uchun u o'zgarganligini so'rasam bo'ladimi? Kompaniyamizdagi barcha brauzerlarning sozlamalarini o'zgartirish uchun PITA bir oz. Hatto Safari yoki aqlli telefonlarda ishlaydiganlarni qanday qilishni hali bilmaganman. O'zgarishning biron bir imkoniyati quyidagi masalalar bilan bog'liqmi? github.com/spring-projects/spring-boot/issues/7648
qo'shib qo'ydi muallif Thomas Oellrich, manba

Oxirgi fikrlar mijozning so'rovini qabul qilishi mumkinligini bildiradigan kontent turini qaytaradi. Mijoz agar so'ragan Accept sarlavhasini yuborsa application/json javobini olasiz:

Accept: application/json
14
qo'shib qo'ydi
Firefox Quantum foydalanuvchilari uchun ushbu kengaytma yordamida jsonni to'g'ri ko'rsatishingiz mumkin: addons.mozilla.org/en-US/firefox/addon/…
qo'shib qo'ydi muallif SeB.Fr, manba
"Ajratilgan narsalar" javob organining tuzilishini o'zgartirish demakdir. Yaxshi yozilgan dastur 1.5 o'zgarishidan ta'sirlanmasligi kerak.
qo'shib qo'ydi muallif Andy Wilkinson, manba
@kap Firefox brauzeri brauzerning yangi versiyalari yaxshi o'rnatilgan JSON tomoshabiniga ega bo'lsa-da, lekin application/vnd.spring-boot.actuator.v1 + json ni tan olmang haqiqiy JSON turi. JSONView plaginini quyidagi ikkita variantni tekshirib foydalanishingiz mumkin: HTTP qabul qilish sarlavhasida "application/json" so'rovlarini va Ichki Firefox JSON viewer ilovasidan foydalaning. Bu brauzerni javob sifatida application/json deb so'rashi mumkin, ammo JSONView javobni o'qishga xalaqit bermaydi, u Firefox tomonidan oddiy JSON sifatida o'qiladi.
qo'shib qo'ydi muallif jihor, manba
OK, hech bo'lmasa o'z arizamim va yaxshi ish tutadigan boshqa odamlar uchun ishlaydi. Firefox uchun ba'zi sozlamalarni qidirishim kerak, ular har doim ularni ko'rsatish o'rniga endpointlarni yuklab olishadi. Rahmat.
qo'shib qo'ydi muallif kap, manba
Rahmat, lekin men ushbu ma'lumotni mobil ilovani ishlab chiquvchilariga yuboraman deb o'ylamayman :-) Buning o'rniga, sog'lik API-ni quyidagi kabi narsalarni silliq ushlab turish uchun bekor qilasiz.
qo'shib qo'ydi muallif hirro, manba
qo'shib qo'ydi muallif hirro, manba
Men ham bunga qodir edim. Nima uchun u o'zgarganligini so'rasam bo'ladimi? Kompaniyamizdagi barcha brauzerlarning sozlamalarini o'zgartirish uchun PITA bir oz. Hatto Safari yoki aqlli telefonlarda ishlaydiganlarni qanday qilishni hali bilmaganman. O'zgarishning biron bir imkoniyati quyidagi masalalar bilan bog'liqmi? github.com/spring-projects/spring-boot/issues/7648
qo'shib qo'ydi muallif Thomas Oellrich, manba

Oxirgi fikrlar mijozning so'rovini qabul qilishi mumkinligini bildiradigan kontent turini qaytaradi. Mijoz agar so'ragan Accept sarlavhasini yuborsa application/json javobini olasiz:

Accept: application/json
14
qo'shib qo'ydi
Firefox Quantum foydalanuvchilari uchun ushbu kengaytma yordamida jsonni to'g'ri ko'rsatishingiz mumkin: addons.mozilla.org/en-US/firefox/addon/…
qo'shib qo'ydi muallif SeB.Fr, manba
"Ajratilgan narsalar" javob organining tuzilishini o'zgartirish demakdir. Yaxshi yozilgan dastur 1.5 o'zgarishidan ta'sirlanmasligi kerak.
qo'shib qo'ydi muallif Andy Wilkinson, manba
@kap Firefox brauzeri brauzerning yangi versiyalari yaxshi o'rnatilgan JSON tomoshabiniga ega bo'lsa-da, lekin application/vnd.spring-boot.actuator.v1 + json ni tan olmang haqiqiy JSON turi. JSONView plaginini quyidagi ikkita variantni tekshirib foydalanishingiz mumkin: HTTP qabul qilish sarlavhasida "application/json" so'rovlarini va Ichki Firefox JSON viewer ilovasidan foydalaning. Bu brauzerni javob sifatida application/json deb so'rashi mumkin, ammo JSONView javobni o'qishga xalaqit bermaydi, u Firefox tomonidan oddiy JSON sifatida o'qiladi.
qo'shib qo'ydi muallif jihor, manba
OK, hech bo'lmasa o'z arizamim va yaxshi ish tutadigan boshqa odamlar uchun ishlaydi. Firefox uchun ba'zi sozlamalarni qidirishim kerak, ular har doim ularni ko'rsatish o'rniga endpointlarni yuklab olishadi. Rahmat.
qo'shib qo'ydi muallif kap, manba
Rahmat, lekin men ushbu ma'lumotni mobil ilovani ishlab chiquvchilariga yuboraman deb o'ylamayman :-) Buning o'rniga, sog'lik API-ni quyidagi kabi narsalarni silliq ushlab turish uchun bekor qilasiz.
qo'shib qo'ydi muallif hirro, manba
qo'shib qo'ydi muallif hirro, manba
Men ham bunga qodir edim. Nima uchun u o'zgarganligini so'rasam bo'ladimi? Kompaniyamizdagi barcha brauzerlarning sozlamalarini o'zgartirish uchun PITA bir oz. Hatto Safari yoki aqlli telefonlarda ishlaydiganlarni qanday qilishni hali bilmaganman. O'zgarishning biron bir imkoniyati quyidagi masalalar bilan bog'liqmi? github.com/spring-projects/spring-boot/issues/7648
qo'shib qo'ydi muallif Thomas Oellrich, manba

https://stackoverflow.com/users/2952093/kap ning sharhiga javob sifatida (mening obro'yim past sharh yarating): JSONga qaytadigan so'nggi nuqtalarni tekshirish uchun Firefoxdan foydalanganda, men qo'shilgan JSONView-dan foydalanaman. Sozlamalarda muqobil JSON kontent turlarini belgilash imkoniyati mavjud, faqatgina application/vnd.spring-boot.actuator.v1 + json ilovasini qo'shing va siz qaytib kelgan JSONni brauzeringiz ichida ajoyib chop etishda ko'rasiz .

13
qo'shib qo'ydi

Ta'qib qilganingizdek, aktuatorlar uchun kontent turi 1.5.x da o'zgargan.

Agar siz "Qabul qilaman:" sarlavhasida "application/json" ni qo'ygan bo'lsangiz, odatiy kontentni olishingiz kerak.

Ammo siz mijozlarni o'zgartirishning biron-bir yo'li yo'q bo'lsa, ushbu snippet sog'liqni (tafsilotlarsiz) va original kontent turini qaytaradi (1.4.x usuli).

@RestController
@RequestMapping(value = "/health", produces = MediaType.APPLICATION_JSON_VALUE)
public class HealthController {

    @Inject
    HealthEndpoint healthEndpoint;

    @RequestMapping(method = RequestMethod.GET)
    @Timed
    public Health health() throws IOException {
        Health health = healthEndpoint.invoke();
        return Health.status(health.getStatus()).build();
    }
}

Konfiguratsiya (mavjud salomatlikni yo'qotish)

endpoints.health.path: internal/health
5
qo'shib qo'ydi

https://github.com/spring-projects/spring -boat/issues/2449 (u ham yaxshi ishlaydi, lekin yangi turni butunlay olib tashlaydi) bilan tanishdim

@Component
public class ActuatorCustomizer implements EndpointHandlerMappingCustomizer {

    static class Fix extends HandlerInterceptorAdapter {


        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            Object attribute = request.getAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE);
            if (attribute instanceof LinkedHashSet) {
                @SuppressWarnings("unchecked")
                LinkedHashSet lhs = (LinkedHashSet) attribute;
                if (lhs.remove(ActuatorMediaTypes.APPLICATION_ACTUATOR_V1_JSON)) {
                    lhs.add(ActuatorMediaTypes.APPLICATION_ACTUATOR_V1_JSON);
                }
            }
            return true;
        }

    }

    @Override
    public void customize(EndpointHandlerMapping mapping) {
        mapping.setInterceptors(new Object[] {new Fix()});
    }
}

hech narsa aniqlanmaganida all aktuator so'nggi nuqtalari uchun application/json ni ishlatishi uchun yangi sotuvchining mediatype-ni qo'yadi.

Yengil ochilish 1.5.3 bilan sinovdan o'tgan

4
qo'shib qo'ydi
@crusy Men bu maxsus yangi turdagi nima uchun ishlatilganligini bilmayman, shuning uchun uni olib tashlamoqchi emasman. U qo'llab-quvvatlanadigan mediatiplar ro'yxatida qolishi mumkin, shuning uchun uni istagan kod so'rashi mumkin, lekin u uchun kod /json keyin kelishi kerak, chunki json olish uchun standart brauzerdan foydalanishni xohlayman. Agar LinkedHashSet qo'shimchasini saqlab turadigan bo'lsa, men uni olib tashlayman va uni qaytarib olish uchun uni qayta qo'shaman. Birinchidan, bu yangi turdagi narsalarni o'zgartirmaganligim uchun agar bo'lsa .
qo'shib qo'ydi muallif zapl, manba
Men uchun Spring Boot 1.5.4.RELEASE va Grails 3.3.0.RC1 da ishlaydi, lekin faqatgina mapping.setInterceptors (yangi Fix ())
qo'shib qo'ydi muallif jerryb, manba
Sizning kodingiz [application/json, application/vnd.spring-boot.actuator.v1 + dasturiga o'tish uchun [application/vnd.spring-boot.actuator.v1 + json, application/json] json] . Nima ishlaydi (va kamroq chalkash bo'lishi mumkin): lhs.remove (ActuatorMediaTypes.APPLICATION_ACTUATOR_V1_JSON); lhs.add (MediaType.APPLICATION_JSON);
qo'shib qo'ydi muallif crusy, manba
Tez savol: if (... olib tashlandi ...) {... qayta kiritish ...} ? HashSet.remove() faqat element mavjud bo'lganida o'chiriladi . Bu ishlaydi, lekin nima uchun? :-)
qo'shib qo'ydi muallif crusy, manba

Firefox ning JSON-versiyasida joylashgan application/vnd.spring-boot.actuator.v1 + json ni qo'llab-quvvatlash uchun ushbu addonni o'rnatishingiz mumkin: json-kontent-turi-bekor qilish . "Json" dan "application/json" ga ega kontent turlarini o'zgartiradi.

Update: Firefox 58+ has built-in support for these mime types, and no addon is needed anymore. See https://bugzilla.mozilla.org/show_bug.cgi?id=1388335

2
qo'shib qo'ydi
@AndreLDM Ha, javobni yangiladim.
qo'shib qo'ydi muallif Bian Jiaping, manba
"Firefox 58+" uchun bu zarurat bo'lmaydi, deydi: "Bu addonning maqsadi Firefox 58-ga asl nusxada qo'shildi."
qo'shib qo'ydi muallif AndreLDM, manba

SpringBoot 2.0.x dan boshlab EndpointHandlerMappingCustomizer dasturini bajarishda taklif qilingan yechim endi ishlamaydi.

Yaxshi xabar, hal osonroq.

Bean EndpointMediaTypes ko'rsatilishi kerak. Ushbu kod SpringBoot class WebEndpointAutoConfiguration tomonidan sukut bo'yicha taqdim etiladi.

O'zingiz bilan ta'minlash quyidagi tarzda bo'lishi mumkin:

@Configuration
public class ActuatorEndpointConfig {

    private static final List MEDIA_TYPES = Arrays
        .asList("application/json", ActuatorMediaType.V2_JSON);

    @Bean
    public EndpointMediaTypes endpointMediaTypes() {
        return new EndpointMediaTypes(MEDIA_TYPES, MEDIA_TYPES);
    }
}
1
qo'shib qo'ydi

SpringBoot 2.0.x dan boshlab EndpointHandlerMappingCustomizer dasturini bajarishda taklif qilingan yechim endi ishlamaydi.

Yaxshi xabar, hal osonroq.

Bean EndpointMediaTypes ko'rsatilishi kerak. Ushbu kod SpringBoot class WebEndpointAutoConfiguration tomonidan sukut bo'yicha taqdim etiladi.

O'zingiz bilan ta'minlash quyidagi tarzda bo'lishi mumkin:

@Configuration
public class ActuatorEndpointConfig {

    private static final List MEDIA_TYPES = Arrays
        .asList("application/json", ActuatorMediaType.V2_JSON);

    @Bean
    public EndpointMediaTypes endpointMediaTypes() {
        return new EndpointMediaTypes(MEDIA_TYPES, MEDIA_TYPES);
    }
}
1
qo'shib qo'ydi