提交 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 {
throw new IllegalArgumentException("'" + name + "' header is read-only");
}
verifyType(name, value);
if (!ObjectUtils.nullSafeEquals(value, getHeader(name))) {
this.modified = true;
if (value != null) {
if (value != null) {
// Modify header if necessary
if (!ObjectUtils.nullSafeEquals(value, getHeader(name))) {
this.modified = true;
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);
}
}
......
/*
* 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");
* you may not use this file except in compliance with the License.
......@@ -18,6 +18,7 @@ package org.springframework.messaging.support;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
......@@ -40,6 +41,7 @@ import static org.junit.Assert.*;
*
* @author Rossen Stoyanchev
* @author Sebastien Deleuze
* @author Juergen Hoeller
*/
public class MessageHeaderAccessorTests {
......@@ -89,6 +91,24 @@ public class MessageHeaderAccessorTests {
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
public void removeHeaders() {
Map<String, Object> map = new HashMap<>();
......@@ -153,7 +173,6 @@ public class MessageHeaderAccessorTests {
@Test
public void toMap() {
MessageHeaderAccessor accessor = new MessageHeaderAccessor();
accessor.setHeader("foo", "bar1");
......@@ -380,7 +399,6 @@ public class MessageHeaderAccessorTests {
}
public static class TestMessageHeaderAccessor extends MessageHeaderAccessor {
private TestMessageHeaderAccessor() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册