Когда я нажимаю API /greeting2 от Postman, я получаю { как ответ, но когда я добавляю @JsonProperty в поле вместе с @XmlElement, я получаю правильный результат.
Проблема в том, что, поскольку Customer является сторонним классом , я не хочу его менять.
У меня есть следующий класс контроллера:
Код: Выделить всё
package com.example.demo.controller;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.example.demo.bean.Customer;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@RestController
public class DemoController {
@GetMapping("/greeting")
@Produces(MediaType.APPLICATION_JSON)
public String getGreeting()
{
String str="{\"global-customer-id\":\"1234\",\"subscriber-name\":\"test\"}";
return str;
}
private ObjectMapper getObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
messageConverter.setPrettyPrint(false);
messageConverter.setObjectMapper(mapper);
mapper.setVisibility(PropertyAccessor.CREATOR, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
mapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.SETTER, Visibility.NONE);
mapper.setSerializationInclusion(Include.NON_NULL);
return mapper;
}
private RestTemplate getRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
messageConverter.setPrettyPrint(false);
messageConverter.setObjectMapper(getObjectMapper());
restTemplate.getMessageConverters()
.removeIf(m -> m.getClass().getName().equals(MappingJackson2HttpMessageConverter.class.getName()));
restTemplate.getMessageConverters().add(messageConverter);
return restTemplate;
}
@GetMapping("/greeting2")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Object getGreeting2() throws Exception {
RestTemplate restTemplate =getRestTemplate();
ResponseEntity response = restTemplate.exchange("http://localhost:8080/greeting", HttpMethod.GET, null, Customer.class);
return response.getBody();
}
}
Код: Выделить всё
package com.example.demo.bean;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "customer")
public class Customer {
@XmlElement(name = "global-customer-id")
private String globalCustomerId;
@XmlElement(name = "subscriber-name")
private String subscriberName;
// Getters and setters
public String getGlobalCustomerId() {
return globalCustomerId;
}
public void setGlobalCustomerId(String globalCustomerId) {
this.globalCustomerId = globalCustomerId;
}
public String getSubscriberName() {
return subscriberName;
}
public void setSubscriberName(String subscriberName) {
this.subscriberName = subscriberName;
}
}
Код: Выделить всё
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.0
Подробнее здесь: [url]https://stackoverflow.com/questions/78815593/mapping-json-during-deserialization-with-different-casing[/url]
Мобильная версия