AWS Lambda Constructor перегружает Java POJO

Я создал Lambda на основе этого URL-адреса: https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-pojo.html. Есть три основных класса:

package example;

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class HelloPojo implements RequestHandler<RequestClass, ResponseClass>{   

public ResponseClass handleRequest(RequestClass request, Context context){
    String greetingString = String.format("Hello %s, %s.", request.firstName, request.lastName);
    return new ResponseClass(greetingString);
}
}

является обработчиком Lambda.

package example;

 public class RequestClass {
    String firstName;
    String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public RequestClass(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public RequestClass() {
    }
}

это класс запроса.

package example;

 public class ResponseClass {
    String greetings;

    public String getGreetings() {
        return greetings;
    }

    public void setGreetings(String greetings) {
        this.greetings = greetings;
    }

    public ResponseClass(String greetings) {
        this.greetings = greetings;
    }

    public ResponseClass() {
    }

}

это класс ответа.

Вход - это что-то вроде строк:

{ "firstName": "John", "lastName": "Doe" }  

При этом у меня есть некоторые вопросы относительно RequestClass. Прямо сейчас это зависит от того, есть ли имя и фамилия, предоставленные как часть ввода. Однако, скажем, предоставляется только имя firstName, и я хочу иметь другой конструктор в RequestClass только с параметром firstName и инициализировать lastName значением lastName по умолчанию, что-то вроде

public RequestClass(String firstName) {
        this.firstName = firstName;
        this.lastName = "defaultLastName";
    }

Когда я пытаюсь сделать что-то в этом духе и получаю доступ к переменным в handleRequest, я могу получить firstName, но lastName всегда имеет значение null (предположительно, потому что я не предоставляю его как часть ввода). Любая причина, по которой это происходит, и что я могу сделать, чтобы при доступе к lastName в классе обработчика я мог получить «defaultLastName» вместо null?

Пожалуйста, дайте мне знать, если есть дополнительные разъяснения, которые я должен добавить, я не очень часто публикую сообщения в StackOverflow и хочу убедиться, что мой вопрос уместен!


person user2397837    schedule 08.11.2018    source источник


Ответы (1)


вы можете установить некоторые значения по умолчанию в конструкторе по умолчанию.

public RequestClass() {
  firstName = "defaultFirstName";
  lastName = "defaultLastName;
}

А затем вызовите параметризованный конструктор с помощью this.

public RequestClass(String firstName) {
  this();
  this.firstName = firstName;
}

Литература по перегрузке конструктора: https://beginnersbook.com/2013/05/constructor-overloading/

person Simon.2020    schedule 23.08.2019