如果由RestTemplate使用,则在Jackson序列化程序内自动装入

q35jwt9p  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(154)

我的一个序列化程序中有一个@Autowired,它扩展了StdSerializer

public class RefSerializer extends StdSerializer<LabeledElement> {

    @Autowired
    I18n i18n;

    public RefSerializer() {
        this(null);
    }

    public RefSerializer(Class<LabeledElement> t) {
        super(t);
    }

    @Override
    public void serialize(LabeledElement element, JsonGenerator generator, SerializerProvider provider) throws IOException {
        String identifier = null;
        String label = LabelUtils.labelPlanElement(this.i18n, planElement, "ref");

        generator.writeObject(ReferenceElement.of(element.getId(), label, identifier));
    }
}

并由模型类中的@JsonSerialize使用。

@JsonSerialize(contentUsing = RefSerializer.class)
@JsonDeserialize(contentUsing = PlanElementDeserializer.class)
@OneToMany(fetch = FetchType.EAGER)
private List<PlanElement> planElements;

如果在我的@RestComponent注解终结点内调用序列化程序,则会解析@Autowired,并且对于传入和返回的模型,一切都正常工作。
现在我想通过RestTemplate#交换主动发送模型,但是现在Serializer中的@Autowired为空。
restTemplate.exchange(endpointUrl, httpMethod, new HttpEntity<>(planElement, authHeader), Map.class, authParameters);
是否有办法让自动配置为使用RestTemplate的传出REST调用工作?
使用Spring启动2.6.3,Java 17

j2datikz

j2datikz1#

如果RestTemplate是由@Configuration文件中的bean提供的,如下所示:

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.build();
}

然后在使用RestTemplate的服务内部通过@Autowired自动连接,而不是通过“new RestTemplate()”示例化,则自定义序列化程序内部的自动连接服务也可用于RestTemplates REST调用。

相关问题