Skip to content

Commit 2279439

Browse files
committed
Fix "Cannot read property 'methods' of null" in DispatcherMappings
closes #1152
1 parent a1cdabe commit 2279439

File tree

1 file changed

+54
-28
lines changed

1 file changed

+54
-28
lines changed

spring-boot-admin-server-ui/src/main/frontend/views/instances/mappings/DispatcherMappings.vue

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
- Copyright 2014-2018 the original author or authors.
2+
- Copyright 2014-2019 the original author or authors.
33
-
44
- Licensed under the Apache License, Version 2.0 (the "License");
55
- you may not use this file except in compliance with the License.
@@ -25,70 +25,93 @@
2525
</thead>
2626
<tbody :key="`${dispatcherName}_mappings`">
2727
<template v-for="(mapping, idx) in handlerMappings">
28-
<template v-if="mapping.details">
28+
<template v-if="mapping.details && mapping.details.requestMappingConditions">
2929
<tr :key="`${dispatcherName}_${idx}_pattern`">
30-
<td
31-
:rowspan="2 + countNonEmptyArrays(mapping.details.requestMappingConditions, 'methods', 'consumes', 'produces', 'params', 'headers')"
32-
>
33-
<div v-for="pattern in mapping.details.requestMappingConditions.patterns"
34-
:key="`${dispatcherName}_${idx}_${pattern}`"
30+
<td :rowspan="computeRowSpanForMapping(mapping)">
31+
<div
32+
v-for="pattern in mapping.details.requestMappingConditions.patterns"
33+
:key="`${dispatcherName}_${idx}_${pattern}`"
3534
>
3635
<code v-text="pattern" />
3736
</div>
3837
</td>
3938
</tr>
40-
41-
<tr v-if="mapping.details.requestMappingConditions.methods.length"
42-
:key="`${dispatcherName}_${idx}_methods`"
39+
<tr
40+
v-if="mapping.details.requestMappingConditions.methods.length"
41+
:key="`${dispatcherName}_${idx}_methods`"
4342
>
4443
<th class="is-narrow">
4544
<small>Methods</small>
4645
</th>
47-
<td class="monospaced is-breakable" v-text="mapping.details.requestMappingConditions.methods.join(', ')" />
46+
<td
47+
class="monospaced is-breakable"
48+
v-text="mapping.details.requestMappingConditions.methods.join(', ')"
49+
/>
4850
</tr>
49-
50-
<tr v-if="mapping.details.requestMappingConditions.consumes.length"
51-
:key="`${dispatcherName}_${idx}_consumes`"
51+
<tr
52+
v-if="mapping.details.requestMappingConditions.consumes.length"
53+
:key="`${dispatcherName}_${idx}_consumes`"
5254
>
5355
<th class="is-narrow">
5456
<small>Consumes</small>
5557
</th>
56-
<td class="monospaced is-breakable" v-text="mediaTypePredicates(mapping.details.requestMappingConditions.consumes)" />
58+
<td
59+
class="monospaced is-breakable"
60+
v-text="mediaTypePredicates(mapping.details.requestMappingConditions.consumes)"
61+
/>
5762
</tr>
58-
59-
<tr v-if="mapping.details.requestMappingConditions.produces.length"
60-
:key="`${dispatcherName}_${idx}_produces`"
63+
<tr
64+
v-if="mapping.details.requestMappingConditions.produces.length"
65+
:key="`${dispatcherName}_${idx}_produces`"
6166
>
6267
<th class="is-narrow">
6368
<small>Produces</small>
6469
</th>
65-
<td class="monospaced is-breakable" v-text="mediaTypePredicates(mapping.details.requestMappingConditions.produces)" />
70+
<td
71+
class="monospaced is-breakable"
72+
v-text="mediaTypePredicates(mapping.details.requestMappingConditions.produces)"
73+
/>
6674
</tr>
67-
68-
<tr v-if="mapping.details.requestMappingConditions.params.length"
69-
:key="`${dispatcherName}_${idx}_params`"
75+
<tr
76+
v-if="mapping.details.requestMappingConditions.params.length"
77+
:key="`${dispatcherName}_${idx}_params`"
7078
>
7179
<th class="is-narrow">
7280
<small>Parameters</small>
7381
</th>
74-
<td class="monospaced is-breakable" v-text="paramPredicates(mapping.details.requestMappingConditions.params)" />
82+
<td class="monospaced is-breakable"
83+
v-text="paramPredicates(mapping.details.requestMappingConditions.params)"
84+
/>
7585
</tr>
76-
77-
<tr v-if="mapping.details.requestMappingConditions.headers.length"
78-
:key="`${dispatcherName}_${idx}_headers`"
86+
<tr
87+
v-if="mapping.details.requestMappingConditions.headers.length"
88+
:key="`${dispatcherName}_${idx}_headers`"
7989
>
8090
<th class="is-narrow">
8191
<small>Headers</small>
8292
</th>
83-
<td class="monospaced is-breakable" v-text="paramPredicates(mapping.details.requestMappingConditions.headers)" />
93+
<td class="monospaced is-breakable"
94+
v-text="paramPredicates(mapping.details.requestMappingConditions.headers)"
95+
/>
8496
</tr>
85-
8697
<tr :key="`${dispatcherName}_${idx}_handler`">
8798
<th class="is-narrow">
8899
<small>Handler</small>
89100
</th>
90101
<td class="is-breakable" v-text="mapping.handler" />
91102
</tr>
103+
<tr
104+
v-if="mapping.details.handlerMethod"
105+
:key="`${dispatcherName}_${idx}_handlermethod`"
106+
>
107+
<th class="is-narrow">
108+
<small>Handler Method</small>
109+
</th>
110+
<td
111+
class="is-breakable"
112+
v-text="`${mapping.details.handlerMethod.className}#${mapping.details.handlerMethod.name}`"
113+
/>
114+
</tr>
92115
</template>
93116
<tr v-else :key="`${dispatcherName}_${idx}`">
94117
<td><code v-text="mapping.predicate" /></td>
@@ -112,6 +135,9 @@
112135
}
113136
},
114137
methods: {
138+
computeRowSpanForMapping(mapping) {
139+
return 2 + this.countNonEmptyArrays(mapping.details.requestMappingConditions, 'methods', 'consumes', 'produces', 'params', 'headers') + (mapping.details.handlerMethod ? 1 : 0);
140+
},
115141
countNonEmptyArrays(obj, ...keys) {
116142
return keys.map(key => obj[key]).filter(a => a && a.length).length;
117143
},

0 commit comments

Comments
 (0)