2017-03-01 1 views
0

CRUD ReST API를 구현하는 방법을 배우려고합니다. JAX-RS를 사용하여 간단한 애플리케이션을 만들고 Postman을 사용하여 HTTP 메소드를 테스트하고있다. 내 질문은 어떻게 POST 메서드에 대한 모델에 대한 선택적 필드를 정의합니까?ReST 리소스/선택 필드가있는 모델

ex. Person은 firstName, lastName을 필수 필드로, age, gender를 선택적 필드로 포함합니다.

@XmlRootElement 
public class Person { 

private long id; 
private String firstName; 
private String lastName; 

public Person() {} 

public Person(long id, String firstName, String lastName) { 
    this.id = id; 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 

//getter and setters omitted 

위는 다른 리소스에 대한 하위 리소스이며, 아래의 addPerson 서비스 메소드는 HashMap에 POST하는 데 사용됩니다.

public Person addPerson(long userId, Person person) { 
    Map<Long, Person> persons = users.get(userId).getPersons(); 
    person.setId(persons.size() + 1); 
    persons.put(person.getId(), person); 

    return person; 
} 

나는 누구의 생성자 모델 클래스를 인스턴스화하는 매개 변수의 여러 다른 조합이있는 모델을 구축하는 생각,하지만 매우 효율적인 보이지 않는다. 누군가 조언 할 수 있습니까?

추가 수정 : JSON을 처리하는 동안이 작업을 수행해야합니다. 을 감안할 때이 JSON 형식의 요청 :

{ 
"firstName": "Jay", 
"lastName": "Kay", 
"age": "13" 
} 

{ 
"firstName": "Jay", 
"lastName": "Kay" 
} 

모두 세 이후 처리 가능한 (물론 성별 등)해야한다는이 중 하나를 생략하거나 값이 될 수 있도록 "선택 속성"입니다 . 나는 JSON 파서를 가로 질러 그 요청을 처리하는 해답이 될 수 있기 때문에 그것을 읽으려고한다.

+0

:

는 다음과 같은 요청을 처리하기 위해 방법입니다 가정? –

+0

@JoPeyper 몇 가지 예를 보여주기 위해 수정 사항을 추가했습니다. 위의 내용이 의미가있는 경우 알려주십시오. 고맙습니다! – viviboox3

+0

마지막 줄은 여전히 ​​나에게 분명하지 않습니다. 정확히 JSON에서 처리하려는 것은 무엇입니까? –

답변

0

, 당신의 Person 클래스

@XmlRootElement 
public class Person { 

    private long id; 
    private String firstName; 
    private String lastName; 
    private int age; 
    private String gender; 


    public Person() {} 

    public Person(long id, String firstName, String lastName) { 
     this.id = id; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

우체부에서 요청을하는 반면에 성별과 연령 추가 x-www-form-urlencoded의 키와 agegender을 포함한다.

기본적으로 정수 값은 0이고 문자열 값은 빈 문자열입니다.

요청을 처리하는 방법에서 genderage의 값을 확인하십시오. 값이 요청에 제공된 경우 Person 클래스의 설정자를 사용하여 그에 따라 값을 설정하십시오.

당신이 당신의 모델과 자원 클래스를 제공 할 수
@POST 
@Path("/AddPerson") 
@Produces(MediaType.TEXT_PLAIN) 

public String addPerson(@FormParam("id") long id, 
    @FormParam("firstName") String firstName, 
    @FormParam("lastName") String lastName, 
    @FormParam("age") int age, 
    @FormParam("gender") String gender) { 

    Person person = new Person(id,firstName,lastName); 

    if(age != 0) { 
     person.setAge(age); 
    } 

    if(!gender.equals("")) { 
     person.setGender(gender) 
    } 

    // Assuming that PersonService class has the addPerson method 
    PersonService.addPerson(1,person) 

    return "Person with id "+ id + " added"; 

} 
+0

"기본적으로 String의 [..] 값은 빈 문자열입니다." - 음 .. 아니야. 디폴트에서는, String의 값은 null입니다. – eis

+0

@Anand Undavia 필자는 JSON 형식의 요청을 처리하는 동안 완료해야하는 작업을 수행하는 로터리 방식이라고 생각합니다. JSON에서 비슷한 기능을 수행 할 방법이없는가요? – viviboox3

+0

@eis'gender.equals ("")'는 값이 전달되지 않으면 true이고 값이 전달되면 false입니다. 그러나 두 경우 모두'gender == null'은 false입니다. –

관련 문제