Пользовательский параметр Java JAX-RS со значением по умолчанию

#java #jax-ws #resteasy

#java #jax-ws #легко восстановить

Вопрос:

Допустим, у меня есть это (это всего лишь пример):

 @GET
@Path(value="address")
@Produces("application/json")
public Response getAddress(@QueryParam("user") User user){
  ...
}
  

и пользователь является

 class User{
...
 public static User valueOf(String user){
   if(user == null) return DEFAULT_USER;
   return dao.findById(user);
 }    
}
  

Если я использую /api/address?user=amir, все работает, но идея в том, что если я не указываю значение для user, то я хочу, чтобы использовался DEFAULT_USER . Но на самом деле это не вызывает valueOf. Есть ли способ это исправить?

Комментарии:

1. Основываясь на коде, который вы предоставляете, и документах для «defaultValue», если пользователь не присутствует в URL, ему присваивается значение null. Однако создается впечатление, что вы ожидаете, что метод valueOf будет вызван с параметром (String) null, что не соответствует тому, как работает пропуск «defaultValue».

Ответ №1:

JAX-RS имеет аннотацию @defaultValue:

 @QueryParam("user") @DefaultValue("__DEFAULT")



class User{
...
 public static User valueOf(String user){
   if(user == null||"__DEFAULT".equals(user) return DEFAULT_USER;
   return dao.findById(user);
 }    
}
  

Комментарии:

1. Как это мне помогает? Если пользователь отсутствует, то я хочу DEFAULT_USER. В вашем коде по умолчанию используется «amir»

2. именно этим я сейчас и занимаюсь. Я надеялся на лучшее решение. Но я думаю, этого хватит.