标签: spring-web

RestTemplate无法填充对象

我有以下代码发送请求并收到响应,似乎所有内容都已配置但代码正在返回NullPointerException.

我不确定丢失了什么.我打印出了具有正确URL地址的readyURL变量.stackTrace提供的不多.

try {
    final String APIKEY = "MYAPI";
    final String URL = "http://api-sandbox.seatwave.com/v2/discovery/events?apikey="
            + APIKEY;
    String readyUrl = URL + "&what=" + name;
    RestTemplate restTemplate = new RestTemplate();
    EventsResponse eventResponse = restTemplate.getForObject(readyUrl,
            EventsResponse.class);

    System.err.println("seatwave>>>"
            + eventResponse.getEvents().getEvent().size()); //line 245
} catch (NullPointerException e) {
    e.printStackTrace();
}


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class EventsResponse {
    @XmlElement
    private Status status;
    @XmlElement(name = "Paging")
    private Page page;
    @XmlElement
    private Events events;

    public Status getStatus() {
      return status;
    }

    public void setStatus(Status status) …
Run Code Online (Sandbox Code Playgroud)

java rest spring jaxb spring-web

6
推荐指数
1
解决办法
898
查看次数

如何使用 Spring Cloud Security Oauth2 在单个 Spring 引导应用程序上使用多个 Oauth2 SSO 服务器?

我想让用户选择使用他们的 Google 或 Facebook 帐户登录到 Spring Boot Web 应用程序。

我检查了Spring Cloud Security 文档This GitHub issue以添加此类 SSO 功能,但在两者上都只显示了如何配置一个 SSO 服务器,因此它是 Google 或 Facebook。

如何添加这两个选项?在 Web 前端,我将为每个选项添加一个按钮,以便用户可以选择要使用的帐户,Google 或 Facebook。

或者我选择了错误的包,应该使用完全不同的东西来实现这一目标?

谢谢!

spring-boot spring-security-oauth2 spring-cloud spring-web

6
推荐指数
1
解决办法
1万
查看次数

SmartValidator - 手动调用组验证

春季4.3.2

我需要手动调用SmartValidator.validate(),我需要它使用我在目标实体上定义的验证组.javadoc说这个......

"validate()的这个变体支持验证提示,例如针对JSR-303提供程序的验证组(在这种情况下,提供的提示对象需要是类型为Class的注释参数)."

void validate(Object target,
          Errors errors,
          Object... validationHints)
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我找不到有关使用"validationHints"的更多信息或示例.所以我一直在尝试以下内容......

validator.validate(targetEntity, errors, new Class[]{ValidationGroup1.class});

validator.validate(targetEntity, errors, ValidationGroup1.class);
Run Code Online (Sandbox Code Playgroud)

到目前为止,它完全忽略了我的分组.它总是调用所有验证器.有任何想法吗?

谢谢!

===================================

更新:javadoc也说这个..

"注意:实际目标Validator可能会忽略验证提示,在这种情况下,此方法的行为应与其常规Validator.validate(Object,Errors)兄弟一样."

这听起来像正在发生的事情.但它没有提供任何线索,为什么它可能会忽略它.

validation spring bean-validation spring-web

6
推荐指数
1
解决办法
3398
查看次数

package org.springframework.web.bind.annotation does not exist even though it's defined in POM

So I have this code

import org.springframework.web.bind.annotation.GetMapping;
Run Code Online (Sandbox Code Playgroud)

And I already have the following in my POM file

<packaging>war</packaging>
    <properties>
        <spring.version>4.3.0.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

Yet when I built it ends up complaining package org.springframework.web.bind.annotation does not exist

Why? I already added spring web as a dependency. What am I doing wrong?

java spring spring-mvc maven spring-web

6
推荐指数
2
解决办法
1万
查看次数

如何在 spring-web servlet 中接受 text/csv 作为内容类型?

我想创建一个生成text/csv内容的简单网络服务。但我不能要求它:

@RestController
public class MyServlet {
    @PostMapping(produces = {"text/csv", "application/json"})
    public Object post() {
        //...
    }
}

spring.mvc.contentnegotiation.media-types.csv=text/csv
Run Code Online (Sandbox Code Playgroud)

当我发送带有 http 标头的 post 请求时Content-Type: text/csv,出现以下错误:

415:Content type 'text/csv' not supported

这是我的配置:

@Configuration
public class ContentNegotiationConfiguration implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer
                .favorParameter(true) //favor &format=csv
                .defaultContentType(MediaType.APPLICATION_JSON)
                .parameterName(format);
                //.mediaType("csv", new MediaType("text", "csv")) //also tried without success
    }
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-web spring-rest

6
推荐指数
1
解决办法
1万
查看次数

Spring WebClient put 映射:不支持内容类型“application/json”

我尝试使用 WebClient 通过 REST 调用另一个服务,但总是收到错误:

org.springframework.web.reactive.function.UnsupportedMediaTypeException:不支持内容类型“application/json”

所有分配都具有相同版本的依赖项,通过 Postman 调用资源效果很好。问题是当第一个应用程序充当代理(客户端)尝试调用第二个应用程序(服务)时

我的服务器资源:

@RequestMapping(value = "/properties")
@PutMapping(consumes = APPLICATION_JSON_UTF8_VALUE)
@ResponseStatus(CREATED)
public void saveProperty(@Valid @RequestBody PropertyForm form) {
    service.save(new PropertyImpl(form));
}
Run Code Online (Sandbox Code Playgroud)

我的客户资源:

WebClient client = WebClient.create(serviceUrl);

Mono<Void> save(PropertyForm form) {
    return client.put()
            .uri("properties")
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .body(BodyInserters.fromObject(form))
            .retrieve()
            .bodyToMono(Void.class);
}
Run Code Online (Sandbox Code Playgroud)

我的 build.gradle 文件:

dependencies {
    compile "org.springframework.boot:spring-boot-starter-reactor-netty:2.0.4.RELEASE"
    compile "org.springframework.boot:spring-boot-starter-web:2.0.4.RELEASE"
    compile "org.springframework:spring-webflux:5.0.4.RELEASE"

    compile "javax.xml.bind:jaxb-api:2.3.0"
}
Run Code Online (Sandbox Code Playgroud)

我是否缺少一些依赖项来启用 JSON contentType?这个例子很简单,但对我来说也很成问题。

表格型号:

class PropertyForm {

    private String group;
    private String key;
    private String value;
    // getters & setters
}
Run Code Online (Sandbox Code Playgroud)

来源: …

java rest spring-boot spring-web spring-webflux

6
推荐指数
1
解决办法
2万
查看次数

在 Spring Boot 中自动将 Rest 控制器序列化为 CSV 而不是 JSON

我正在寻找一种快速/简单的解决方案,如何自动将 Rest 控制器输出序列化为 CSV 而不是 JSON。我有最简单的 Spring boot 应用程序:

@SpringBootApplication
public class CsvExportApplication {

    public static void main(String[] args) {
        SpringApplication.run(CsvExportApplication.class, args);
    }
}

class User {
    String name;
    String surname;

    public User(String name, String surname) {
        this.name = name;
        this.surname = surname;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getName() {
        return name;
    }

    public String getSurname() {
        return surname;
    }
}

@RestController
class UserController …
Run Code Online (Sandbox Code Playgroud)

spring jackson spring-boot spring-web

6
推荐指数
1
解决办法
2974
查看次数

解决错误java.io.StreamCorruptedException: Inconsistent vector internals

我有一个 Spring webapp,它使用 HttpInvoker 连接到 Spring Boot 服务。我最近更新了服务项目以使用 Java 11,同时将其更新为 Spring Boot starter 2.1.3.RELEASE。服务项目提供了一个接口 jar,其中包含使用 HttpInvoker 时所需的所有请求和响应对象以及接口类。

我遇到了这个错误,但仅限于某些服务端点。我一直试图找出成功请求和失败请求之间的区别,但没有成功。

我试图解决问题的事情

  • 两个应用程序都运行相同版本的 Java 11
  • 更新了 Spring webapp 以使用 Spring 5.1.5.RELEASE,这与 spring boot starter 附带的版本相同。
    • 更新了两个应用程序以使用 spring-web 5.1.5.RELEASE。这是远程库的来源
    • 确保我在响应对象上扩展了 Serializable并更新了 serialVersionUID
    • 确认我在我的 webapp 中使用了正确版本的服务接口

谁能指出我正确的方向来解决这个问题......我现在真的在挠头

此错误的主要问题是服务接收来自 webapp 的请求,处理请求,然后响应。在远程回调的某个地方,我收到此错误,我的 web 应用程序响应异常,但在后台请求已成功完成。

以下是堆栈跟踪的一部分,我故意遗漏了一些,如果您需要更多信息,请告诉我。

java.io.StreamCorruptedException: Inconsistent vector internals
    at java.base/java.util.Vector.readObject(Vector.java:1191) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1160) ~[na:na]
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2216) ~[na:na]
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2087) ~[na:na]
    at …
Run Code Online (Sandbox Code Playgroud)

java spring httpinvoker spring-boot spring-web

6
推荐指数
1
解决办法
1509
查看次数

如何在Spring中创建非阻塞@RestController Web服务?

我有一个@RestControllerWeb 服务方法,可能会通过长时间运行的服务调用来阻止响应线程。如下:

@RestController
public class MyRestController {
    //could be another webservice api call, a long running database query, whatever
    @Autowired
    private SomeSlowService service;

    @GetMapping()
    public Response get() {
        return service.slow();
    }

    @PostMapping()
    public Response get() {
        return service.slow();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:如果 X 用户在这里调用我的服务怎么办?正在执行的线程将全部阻塞,直到返回响应。因此消耗了“最大连接数”、最大线程数等。

我记得前段时间读过一篇关于如何解决此问题的文章,通过以某种方式停放线程直到收到缓慢的服务响应。这样这些线程就不会阻塞,例如tomcat最大连接/池。

但我再也找不到它了。也许有人知道如何解决这个问题?

java spring spring-mvc spring-boot spring-web

6
推荐指数
1
解决办法
4897
查看次数

How to set a context root for all @RestController in Spring Web MVC?

I'm looking to define /api as the root context for all my @RestControllers and don't want to specify it for each of them.

For instance, I would like to write @RestController("/clients") instead of @RestController("/api/clients") and make my request mappings available at /api/clients but have my static resources (in /main/resources/static) still served at /**.

So, setting server.servlet.contextPath=/api in application.properties is not a solution for my use case because the static resources will be served at /api, which …

spring spring-mvc spring-boot spring-web

5
推荐指数
1
解决办法
1877
查看次数