提交 b1663585 编写于 作者: J Juergen Hoeller

MessageHeaderAccessor properly removes header even in case of null value

Issue: SPR-14468
上级 d2e105f2
...@@ -306,12 +306,17 @@ public class MessageHeaderAccessor { ...@@ -306,12 +306,17 @@ public class MessageHeaderAccessor {
throw new IllegalArgumentException("'" + name + "' header is read-only"); throw new IllegalArgumentException("'" + name + "' header is read-only");
} }
verifyType(name, value); verifyType(name, value);
if (value != null) {
// Modify header if necessary
if (!ObjectUtils.nullSafeEquals(value, getHeader(name))) { if (!ObjectUtils.nullSafeEquals(value, getHeader(name))) {
this.modified = true; this.modified = true;
if (value != null) {
this.headers.getRawHeaders().put(name, value); this.headers.getRawHeaders().put(name, value);
} }
}
else { else {
// Remove header if available
if (this.headers.containsKey(name)) {
this.modified = true;
this.headers.getRawHeaders().remove(name); this.headers.getRawHeaders().remove(name);
} }
} }
......
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -18,6 +18,7 @@ package org.springframework.messaging.support; ...@@ -18,6 +18,7 @@ package org.springframework.messaging.support;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
...@@ -40,6 +41,7 @@ import static org.junit.Assert.*; ...@@ -40,6 +41,7 @@ import static org.junit.Assert.*;
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Sebastien Deleuze * @author Sebastien Deleuze
* @author Juergen Hoeller
*/ */
public class MessageHeaderAccessorTests { public class MessageHeaderAccessorTests {
...@@ -89,6 +91,24 @@ public class MessageHeaderAccessorTests { ...@@ -89,6 +91,24 @@ public class MessageHeaderAccessorTests {
assertEquals("baz", actual.get("bar")); assertEquals("baz", actual.get("bar"));
} }
@Test
public void testRemoveHeader() {
Message<?> message = new GenericMessage<>("payload", Collections.singletonMap("foo", "bar"));
MessageHeaderAccessor accessor = new MessageHeaderAccessor(message);
accessor.removeHeader("foo");
Map<String, Object> headers = accessor.toMap();
assertFalse(headers.containsKey("foo"));
}
@Test
public void testRemoveHeaderEvenIfNull() {
Message<?> message = new GenericMessage<>("payload", Collections.singletonMap("foo", null));
MessageHeaderAccessor accessor = new MessageHeaderAccessor(message);
accessor.removeHeader("foo");
Map<String, Object> headers = accessor.toMap();
assertFalse(headers.containsKey("foo"));
}
@Test @Test
public void removeHeaders() { public void removeHeaders() {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
...@@ -153,7 +173,6 @@ public class MessageHeaderAccessorTests { ...@@ -153,7 +173,6 @@ public class MessageHeaderAccessorTests {
@Test @Test
public void toMap() { public void toMap() {
MessageHeaderAccessor accessor = new MessageHeaderAccessor(); MessageHeaderAccessor accessor = new MessageHeaderAccessor();
accessor.setHeader("foo", "bar1"); accessor.setHeader("foo", "bar1");
...@@ -380,7 +399,6 @@ public class MessageHeaderAccessorTests { ...@@ -380,7 +399,6 @@ public class MessageHeaderAccessorTests {
} }
public static class TestMessageHeaderAccessor extends MessageHeaderAccessor { public static class TestMessageHeaderAccessor extends MessageHeaderAccessor {
private TestMessageHeaderAccessor() { private TestMessageHeaderAccessor() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册