Сопоставление Json во время десериализации с другим регистромJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сопоставление Json во время десериализации с другим регистром

Сообщение Anonymous »

У меня возникла проблема с сопоставлением JSON с моим классом.
Когда я нажимаю 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;
}
}
Ниже приведен мой pom.xml, я пытался добавить все зависимости Джексона, но это бесполезно:

Код: Выделить всё


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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»